我不断得到
<__main__.Camera object at 0x02C08790>
而且我不知道为什么。
我希望代码从Calc_Speed转到Counter,然后基本上在一个循环中回到Calc_Speed。
class Camera():
distance = 2
speed_limit = 20
number_of_cars = 0
def Calc_Speed(self):
registration = input("Registration Plate: ")
Speeding_List=[]
start = float(input("Start time: "))
end = float(input("End Time: "))
speed = self.distance/(end-start)
print(("Average Speed: ") + str(round(speed, 2)) + (" mph"))
if speed > self.speed_limit:
list3= [str(self.registration)]
Speeding_List.append(list3)
print("Vehicles Caught Speeding: " + str(Speeding_List))
return(program.Counter())
else:
print("Vehicle Not Speeding")
return(program.Counter())
def Counter():
self.number_of_cars = self.number_of_cars + 1
print("Number Of Cars Recorded: " + str(self.number_of_cars))
return(program.Calc_Speed())
program = Camera()
print(program)
[当您仅打印对象时,它会显示对象ID(例如<__main__.Camera object at 0x02C08790>
),这对于我们的凡人是完全无法识别的。您可以通过定义__str__
或__repr__
函数以自定义方式显示实例的数据来解决此问题。
根据您的情况:
def __repr__(self):
return "<__main__.Camera: distance = " + str(self.distance) + "; speed_limit = " + str(self.speed_limit) + "; number_of_cars = " + str(self.number_of_cars) + ">"
[如果存在带有起始变量值的Camera
实例,它将返回
"<__main__.Camera: distance = 2; speed_limit = 20; number_of_cars = 0>"
。
<__main__.Camera object at 0x02C08790>
是系统记住它的方式,但是除了显示它是什么类型的对象之外,它几乎没有用。
我有这样的东西def
def __toString__(self):
return "{} is {} cm tall and {} kilogram and self.__sound)
我只是将“ toString”更改为“ repr”,现在可以使用
而不是打印对象本身,而是要打印该对象的功能。如果将最后一行替换为:
print(program.Calc_Speed())
该程序的工作方式与您想要的类似。