我注意到python不会让你在类定义中将类的实例添加到自身作为静态成员.
>>> class Foo:
... A = Foo()
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in Foo
NameError: name 'Foo' is not defined
Run Code Online (Sandbox Code Playgroud)
但是,以下任一工作:
>>> class Foo:
... pass
...
>>> class Foo:
... A = Foo()
...
>>> Foo.A
<__main__.Foo instance at 0x100854440>
Run Code Online (Sandbox Code Playgroud)
要么
>>> class Foo:
... pass
...
>>> Foo.A = Foo()
>>>
>>> Foo.A
<__main__.Foo instance at 0x105843440>
Run Code Online (Sandbox Code Playgroud)
我找不到任何具有启发性的代码示例或解释.为什么python以不同的方式处理第一种情况?在随后的两个案例中,每个案件的A在哪里?
您的第一个示例不起作用,因为您尚未创建该类Foo.你正在这样做(因此NameError)
您的第二个示例有效,因为您有一个名为的类Foo().你覆盖它,但你仍然保留它的副本.看看这个:
>>> class Foo:
... def __init__(self):
... print 'hi'
...
>>> class Foo:
... A = Foo()
...
hi
>>> Foo.A
<__main__.Foo instance at 0x101019950>
>>> Foo.A.__init__
<bound method Foo.__init__ of <__main__.Foo instance at 0x101019950>>
Run Code Online (Sandbox Code Playgroud)
A 是一个属性,它具有您覆盖的类的值.
至于你的第三个例子,你只是创建一个类的属性,它是类的一个实例.
| 归档时间: |
|
| 查看次数: |
626 次 |
| 最近记录: |