我是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很新。如果有人能让我走上正确的轨道,那就太棒了。我跑的时候一直都会遇到错误。
答案 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代码,它会执行,这是一个非常非常糟糕的事情。