我不明白這是怎么回事。我有一個類“C”,它是“B”的子類?!癇”有一個屬性“b”,它是類“A”的一個實例?!癆”有一個屬性,稱為“a”的列表。當我初始化“C”的兩個不同實例時,它們具有相同的“A”實例,這樣當我附加到 Aa 時,它會導致“C”的兩個實例都具有附加屬性“ba”。class A: a = list()class B: b = A()class C(B): passone = C()two = C()one.b.a.append('one')one.b.a.append('two')two.b.a.append('three')print(one.b.a)print(two.b.a)運行這段代碼打印出:['one', 'two', 'three']['one', 'two', 'three']顯然,one.ba 和 two.ba 指向同一個對象,而我本以為每次調用 C() 時都會初始化“A”的新實例。為什么會發生這種情況,我該如何解決?
1 回答

慕仙森
TA貢獻1827條經驗 獲得超8個贊
這是因為您將a
and聲明b
為類屬性而不是實例變量。您可以將類屬性視為該類的全局變量。所有對象的類屬性只能有一個值。
另一方面,實例變量對于類的每個實例都是唯一的。
總結一下:
class A:
? ? a = 'A'
? ??
? ? def __init__(self):
? ? ? ? self.b = 'B'
foo = A()
bar = A()
foo.a
>>> A
bar.a
>>> A
foo.b
>>> B
bar.b
>>> B
A.a = 'C'
foo.a
>>> C
bar.a
>>> C
foo.b = 'D'
bar.b
>>> B
添加回答
舉報
0/150
提交
取消