【发布时间】:2012-09-09 01:40:54
【问题描述】:
我需要一些帮助来了解 python 初始化的工作原理。我有一个类(Bar)和另一个类(Foo)作为字段/变量。当我尝试直接在 Bar 中(而不是在类 __init__ 中)初始化这个变量时,Bar 的所有实例都将指向同一个 Foo。但是如果我有一个 __init__ 方法,就像在 Bar2 中一样,每个 Bar2 实例都会有一个唯一的 Foo 实例。这里发生了什么?
class Foo():
number = 0
class Bar():
foo = Foo()
class Bar2():
foo = None
def __init__(self):
self.foo = Foo()
first = Bar()
second = Bar()
print "Bar"
print first
print second
print first.foo
print second.foo
first = Bar2()
second = Bar2()
print "\nBar2"
print first
print second
print first.foo
print second.foo
输出例如是:
Bar
<\__main__.Bar instance at 0x025B2AF8>
<\__main__.Bar instance at 0x025B2B20>
<\__main__.Foo instance at 0x004A3AA8>
<\__main__.Foo instance at 0x004A3AA8>
Bar2
<\__main__.Bar2 instance at 0x025B2B48>
<\__main__.Bar2 instance at 0x025B2AF8>
<\__main__.Foo instance at 0x025B2B70>
<\__main__.Foo instance at 0x025B2B98>
使用 Bar 两个实例将引用同一个 Foo 实例。为什么?
编辑:更正了为 Bar 打印两次 first.foo 的错误。产生的行为仍然如输出中所示。
【问题讨论】:
-
不要在 Python 2.x 中写
class Foo():。这将创建一个旧样式类。你几乎肯定不想那样。相反,您需要new style class。为此,请写class Foo(object):。 -
我不知道,谢谢你也指出了这一点。实际上我应该知道,因为变化发生在我第一次接触 Python 之前。
标签: python initialization python-2.7