Re: [問題] 關於class 內變數的問題

看板Python作者 (Scent of Love)時間16年前 (2009/01/22 00:14), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串3/7 (看更多)
你的例子,我稍微改一下值。 class CA: V1 = 'V1' def __init__(self): self.V2 = 'V2' 以下的程式碼,第一行建立了一個型別為CA的obj1 instance。 經過將obj1.V1設為"V_V" 之後,你覺得最後的輸出結果會是如何? obj1 = CA(); print(obj1.V1); print(obj1.V2); obj1.V1 = "V_V"; print(CA.V1); #---------output--------- V1 V2 V1 #---------output--------- 在Java裡面,可透過 static 關鍵字來宣告一個 static field,但是在Python中 static或instance field宣告無法從syntax上來判斷。 以上面的例子來說明,如果CA的V1欄位是一個static欄位,那麼最後一次print的結果 是V1卻不是V_V,這在Java的觀念裡是說不通的。 Python是根據欄位的取用者來決定其欄位是static or instance。 當程式透過 obj1 取用V1欄位時,此時V1為instance欄位。 當程式透過 CA 取用V1欄位時,此時V1為static 欄位。 而CA在建構元中所寫的V2,是實體欄位沒有錯。 記憶體的回收,則是當obj1為unreachable時就會release,官方文件說明Python 目前是採用reference counting的演算法來做garbage collection。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.136.84.169 ※ 編輯: millerlai 來自: 220.136.84.169 (01/22 00:18)

01/23 06:31, , 1F
謝謝你的補充!!
01/23 06:31, 1F
文章代碼(AID): #19Tqdafn (Python)
文章代碼(AID): #19Tqdafn (Python)