我需要一些帮助来理解 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的错误。产生的行为仍然如输出中所示。