< __ main__.Foo对象中的'object'位于0x10f43b7b8>

时间:2017-11-09 07:52:08

标签: python repr python-object

假设一个类:

class Foo(object): pass

制作一个实例:

foo = Foo()

以交互模式测试它们:

In [80]: print(Foo)
<class '__main__.Foo'>

良好的提示,在first_class模块__main__中的类'Foo',但是:

In [81]: print(foo)
<__main__.Foo object at 0x10f43b0b8>

“对象”这个词让我困惑,为什么python在这里使用object而不是instance

2 个答案:

答案 0 :(得分:3)

这是new-style and old-style class

之间的差异
class Old():
    pass

class New(object):
    pass

print `Old()`
print `New()`

使用python2.7,产生:

<__main__.Old instance at 0x10bc23dd0>
<__main__.New object at 0x10bc27590>

最初,repr() on&#34; instance&#34;新旧样式类产生<X instance at ...>,请参阅此commit,但稍后新的样式类实例repr() changed to the current form

答案 1 :(得分:-1)

一个类是数据和方法的集合。

对象是类的实例。

假设您有两个文件:foo.pybar.py

Foo.py:

class Foo:
    pass

Bar.py:

import Foo

class Bar:
    pass


foo = Foo.Foo()
bar = Bar()

print(foo)
# Note the parenthesis. By doing this you are making an instance.
print(Foo.Foo())
# both print something like <Foo.Foo object at 0x000000000229A128>


print(Foo.Foo)
# prints <class 'Foo.Foo'>

print(bar)
# prints <__main__.Bar object at 0x000000000229A5F8>

当您打印fooFoo.Foo()(带括号)时,它告诉您正在引用的类的实例来自模块Foo及其引用的类是Foo。同样,object部分意味着它是来自所述模块的所述类的实例。

如果您打印Foo.Foo(没有括号),您将获得:

<class 'Foo.Foo'>

告诉您该类位于模块Foo中并命名为Foo

打印barBar()(带括号)同样如此: __main__只是意味着您引用的类来自您当前正在执行的脚本。 Bar是您要引用的类。

但是,如果您打印Bar(无括号),您将获得:

<class '__main__.Bar'>

告诉我们类Bar位于主脚本中。

TL; DR:

Bar引用该课程Bar()会在该课程中创建objectinstance

希望我把事情搞清楚了。