-1

假设一个类:

class Foo(object): pass

做一个实例:

foo = Foo()

在交互模式下测试它们:

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

很好的提示,first_class 模块中的“Foo”类__main__,但是:

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

'object'这个词让我很困惑,为什么pythonobject在这里使用而不是instance

4

2 回答 2

3

这是新式和旧式类之间的区别:

class Old():
    pass

class New(object):
    pass

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

使用 python2.7,产生:

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

最初,repr()在新旧样式类 yield 的“实例”上<X instance at ...>,看到这个提交,但后来新样式类实例repr() 更改为当前形式

于 2017-11-21T08:49:24.313 回答
-1

类是数据和方法的集合。

对象是类的一个实例。

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

foo.py:

class Foo:
    pass

酒吧.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>

当您打印fooor Foo.Foo()(带括号)时,它告诉您您引用的类的实例来自模块Foo并且它引用的类是Foo. 再一次,这object部分只是意味着它是来自所述模块的所述类的实例。

如果您打印Foo.Foo(不带括号),您将得到:

<class 'Foo.Foo'>

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

打印barBar()(带括号)也是如此: __main__仅表示您引用的类来自您当前正在执行的脚本。 Bar是你引用的类。

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

<class '__main__.Bar'>

这告诉我们类Bar驻留在主脚本中。

TL;博士:

Bar引用该类Bar()将创建一个objectinstance出该类。

希望我把事情弄清楚了。

于 2017-11-09T08:30:30.037 回答