问题描述 投票:2回答:3

我不断得到

<__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)
python python-3.x
3个回答
7
投票

[当您仅打印对象时,它会显示对象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>是系统记住它的方式,但是除了显示它是什么类型的对象之外,它几乎没有用。


0
投票

我有这样的东西def

def __toString__(self):
    return "{} is {} cm tall and {} kilogram and self.__sound)

我只是将“ toString”更改为“ repr”,现在可以使用


0
投票

而不是打印对象本身,而是要打印该对象的功能。如果将最后一行替换为:

print(program.Calc_Speed())

该程序的工作方式与您想要的类似。

© www.soinside.com 2019 - 2024. All rights reserved.