假设一个类:
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
?
答案 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.py
和bar.py
class Foo:
pass
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>
当您打印foo
或Foo.Foo()
(带括号)时,它告诉您正在引用的类的实例来自模块Foo
及其引用的类是Foo
。同样,object
部分意味着它是来自所述模块的所述类的实例。
如果您打印Foo.Foo
(没有括号),您将获得:
<class 'Foo.Foo'>
告诉您该类位于模块Foo
中并命名为Foo
打印bar
或Bar()
(带括号)同样如此:
__main__
只是意味着您引用的类来自您当前正在执行的脚本。
Bar
是您要引用的类。
但是,如果您打印Bar
(无括号),您将获得:
<class '__main__.Bar'>
告诉我们类Bar
位于主脚本中。
Bar
引用该课程Bar()
会在该课程中创建object
或instance
。