【问题标题】:<__main__. object at 0x02C08790><__主要__。对象位于 0x02C08790>
【发布时间】:2015-08-30 05:31:43
【问题描述】:

我一直在努力

<__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)

【问题讨论】:

  • 你打印一个Speed_Camera 对象。你期待什么?
  • 您的代码有缩进错误,并且没有定义任何名为Speed_Camera 的内容。另外,你从来没有说过你想让程序做什么,所以没有人能告诉你如何让它做你想做的。
  • @BrenBarn。我将类的名称从 Speed_Camera 更改为 Camera,而没有更改其余代码。哎呀!对不起:)
  • 打印该字符串的原因是因为您正在创建一个类的实例并对其进行打印,但是当您在其上使用print 时,该类本身并未定义应返回的内容。你的类中的函数也没有被调用。
  • @JamesKent 所以如果我输入类似“print (program.Calc_Speed()) i”的东西会起作用吗?

标签: python python-3.x


【解决方案1】:

当您只打印一个对象时,它会显示对象 id(如 &lt;__main__.Camera object at 0x02C08790&gt;),这对我们凡人来说是完全无法辨认的。您可以通过定义 __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 实例,它将返回

"&lt;__main__.Camera: distance = 2; speed_limit = 20; number_of_cars = 0&gt;".

&lt;__main__.Camera object at 0x02C08790&gt; 是系统记住它的方式,但除了显示它是什么类型的对象之外,它几乎没有用处。

【讨论】:

    【解决方案2】:

    与其打印对象本身,不如打印该对象的函数。如果您将最后一行替换为:

    print(program.Calc_Speed())
    

    该程序的工作方式与您所寻找的更相似。

    【讨论】:

      【解决方案3】:

      我为链接的封闭副本写了这个答案。由于它更详细地介绍了为什么输出看起来像这样,这显然是规范问题,我把它放在这里。

      因为您正在打印一个 object,而该 object 没有解释如何打印它的 __repr____str__ 方法。

      实施这些方法可以让您打印对象的“描述”。

      背景

      当你在 python 中调用 print(thing) 时,print 会查看 thing 是否有 __str__ 方法,如果有就调用它。如果没有,它会查看 thing 是否有 __repr__ 方法,如果有则调用 that。如果没有,它会继续查找类层次结构,* 直到它以object 结尾,所有用户定义的类都继承自它(现在......)。这就是您在这里看到的方法。

      我们可以试试这个:

      >>> "I am a string".__str__()
      "I am a string"
      >>> "I am a string".__repr__()
      "'I am a string'"
      

      是的!字符串是python中的对象。事实上,一切都是一个对象。

      >>> obj = object() # base class for all classes
      obj.__str__()
      '<object object at 0x7a87787987979877>'
      

      所以它是备用.__str__,它只是在某个内存地址上打印出thing

      *好吧,它会应用 MRO,但我保持简单。

      【讨论】:

        【解决方案4】:

        我同意 Sandford Basset 你也可以试试

        program.Calc_Speed()

        【讨论】:

          猜你喜欢
          • 2023-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-24
          • 1970-01-01
          • 2012-04-20
          相关资源
          最近更新 更多