亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python 類繼承沒有給我單獨的列表實例

Python 類繼承沒有給我單獨的列表實例

慕虎7371278 2023-05-09 16:15:51
我不明白這是怎么回事。我有一個類“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個贊

這是因為您將aand聲明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


查看完整回答
反對 回復 2023-05-09
  • 1 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號