将变量传递给另一个类python

时间:2014-05-27 23:36:11

标签: python class

我是python的新手,目前正在我的大学上课。我被困在我教授希望我们写的程序上。我认为除了正确地将变量传递给类Traffic中的方法getClass之外,我还有大部分他想要的工作。这是给定的任务:

  

第4步:

     

步骤:

     
      
  • 修改名为Traffic的类,它将具有四个私有属性:吞吐量,延迟,抖动,丢失。
  •   
  • 修改getClass类中名为Traffic的方法,该方法会将流量分类如下:   
        
    • 尽力而为:吞吐量< 5,延迟8到10之间   
        吞吐量在5和10之间,延迟> 8
    •   
    • 受控负载:吞吐量在5到10之间,延迟<= 8
        
        吞吐量&gt; = 10,延迟&gt; = 5
    •   
    • 保证:吞吐量&gt; = 10,延迟&lt; 5
    •   
  •   
     

编写一个名为testTrafficClass的程序来测试流量类。该程序将具有main()函数,该函数将初始化类Traffic的四个属性,并打印流量类。然后它会提示用户更改属性,并根据新值打印流量类。

这是我到目前为止的代码:

def Main():
    def __init__(self, throughput = 0, delay = 0, jitter = 0, loss = 0):
        self.__throughput = throughput
        self.__delay = delay
        self.__jitter = jitter
        self.__loss = loss

    throughput = eval(input("Enter Throughput: "))
    delay = eval(input("Enter Delay: "))
    jitter = eval(input("Enter Jitter: "))
    loss = eval(input("Enter Loss: "))

    Traffic.getClass(self, throughput, delay)

class Traffic:
        def getClass(self, throughput, delay):
            if (throughput<5) and (delay <= 10) and (8<=delay):
                print("Best Effort")
            if (5<=throughput) and (throughput<=10) and (delay>8):
                print ("Best Effort")
            if (5<=throughput) and (throughput<=10) and (delay<=8):
                print ("Controlled load")
            if (throughput >=10) and (delay >=5):
                print ("Controlled load")
            if (throughput >=10) and (delay <5):
                print ("Guaranteed")

Main()

我确定这不是最好或最优雅的代码,因为我对Python很新。如果有人能让我走上正确的轨道,那就太棒了。我跑的时候一直都会遇到错误。

1 个答案:

答案 0 :(得分:4)

问题是当你尝试从这里调用一个方法时,你还没有实际实例化Traffic类的实例:

Traffic.getClass(self, throughput, delay)

我认为您应该阅读python class documentation以更好地了解类的工作原理,但是您的解决方案的快速修复将用以下内容替换该行:

 traffic = Traffic() # Creates an instance of the Traffic class
 tclass  = traffic.getClass(throughput, delay) # Calls the getClass method on that instance

另外,你是Python 2.7还是Python 3?无论哪种方式,在eval上调用input都是非常糟糕的做法(在3的情况下)或完全不需要(在2.7的情况下)。如果预期输入为float,则应执行此操作:

 throughput = float(raw_input("Enter Throughput: ")) # Python 2.7
 throughput = float(input("Enter Throughput: "))     # Python 3.X

同样对于你的其他投入。这确保了唯一有效的输入是变成浮点数的东西,其他任何东西都会引发异常。你现在的方式,用户可以输入任意python代码,它会执行,这是一个非常非常糟糕的事情。

相关问题