想想Python 4.1:为什么打印bob给我一个对象而不是一个实例?

时间:2016-08-31 13:23:32

标签: python python-2.7 oop

有关实例与对象的stackoverflow的所有其他答案都引用了本书尚未涵盖的类。 这是代码:

world= TurtleWorld()
bob= Turtle()
print bob
wait_for_user()

这就是结果:

它在盒子中显示乌龟,并打印

<swampy.TurtleWorld.Turtle object at 0x03C3D730>

这本书说它应该说'实例',而不是对象。有什么区别,我做错了什么?

1 个答案:

答案 0 :(得分:1)

你有一个实例;实例是Python对象的。如果你没有实例,你会看到不同的东西:

<class 'swampy.TurtleWorld.Turtle'>

现在,在Python 2中使用旧式类,它确实会说instance;我可以通过而不是继承object

来创建这样的对象
>>> class Turtle: pass
...
>>> Turtle()
<__main__.Turtle instance at 0x10199fe18>

但是,当前swampy release使用新式类;该类继承自object

>>> from swampy.TurtleWorld import Turtle
>>> Turtle.__mro__
(<class 'swampy.TurtleWorld.Turtle'>, <class 'swampy.World.Animal'>, <type 'object'>)

新式课程做的事情略有不同,有些事情已经重新命名和统一。我认为您使用的是第一版Think Python,基于不使用新式类的代码。

你可以完成你的教程,只需要进行一些细微的修饰,比如这些。

但是,你可能想找一本更新,更新的书;例如,Think Python使用Python 3进行了第2版。