我不明白這是怎么回事。我有一個(gè)類“C”,它是“B”的子類。“B”有一個(gè)屬性“b”,它是類“A”的一個(gè)實(shí)例?!癆”有一個(gè)屬性,稱為“a”的列表。當(dāng)我初始化“C”的兩個(gè)不同實(shí)例時(shí),它們具有相同的“A”實(shí)例,這樣當(dāng)我附加到 Aa 時(shí),它會(huì)導(dǎo)致“C”的兩個(gè)實(shí)例都具有附加屬性“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)運(yùn)行這段代碼打印出:['one', 'two', 'three']['one', 'two', 'three']顯然,one.ba 和 two.ba 指向同一個(gè)對(duì)象,而我本以為每次調(diào)用 C() 時(shí)都會(huì)初始化“A”的新實(shí)例。為什么會(huì)發(fā)生這種情況,我該如何解決?
1 回答

慕仙森
TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
這是因?yàn)槟鷮?code>aand聲明b
為類屬性而不是實(shí)例變量。您可以將類屬性視為該類的全局變量。所有對(duì)象的類屬性只能有一個(gè)值。
另一方面,實(shí)例變量對(duì)于類的每個(gè)實(shí)例都是唯一的。
總結(jié)一下:
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
添加回答
舉報(bào)
0/150
提交
取消