理解Python 類別和實例變數
在Python 中,類別和實例變數在定義和修改物件行為中起著至關重要的作用。然而,它們的獨特特徵可能會導致混亂。本文旨在闡明它們的差異,並解釋為什麼列表可以同時顯示為類別變數和實例變數。
類別變數與實例變數
類別變數宣告於類別層級並由該類別的所有實例共用。它們通常在建構函數 (__init__()) 方法之外定義。另一方面,實例變數特定於每個實例,並使用 self 屬性在建構函數中定義。
範例1:類別變數
以下程式碼建立一個帶有類別變數清單和實例變數self.list 的類別:
<code class="python">class testClass(): list = [] # Class variable def __init__(self): self.list.append('thing') # Instance variable</code>
在此範例中,testClass.list 是testClass 的所有實例將共享的類別變數。當呼叫建構函式時,它將「thing」附加到 self.list,為每個實例建立一個實例變數。因此,當您存取 p.list 和 f.list 時,它們都會輸出 ['thing'],因為它們共用相同的類別變數。
範例2:實例變數
相反,當您刪除list 類別變數並在建構子中重新定義它時:
<code class="python">class testClass(): def __init__(self): self.list = [] self.list.append('thing')</code>
testClass 的每個實例現在都將擁有自己的self.list 實例變數。當你呼叫 p.list 和 f.list 時,它們都會輸出 ['thing'],但它們是單獨的列表,在實例之間不共用。
Python 的變數解析
此行為是由於 Python 的變數解析過程造成的。當您存取 self.list 時,Python 首先檢查實例物件中的名稱清單。如果沒有找到,它將搜尋類別定義。
在第一個範例中,self.list 解析為類別變量,因為實例中沒有定義列表名稱。在第二個範例中,self.list 解析為實例變量,因為它是在建構子中定義的。
結論
理解類別變數和實例變數之間的差異至關重要有效地使用 Python 物件。類別變數由所有實例共享,而實例變數特定於每個物件。 Python的變數解析過程決定了當你使用self.variable_name時存取哪個變數。
以上是以下是一些適合您文章內容的基於問題的標題: * Python 類別變數和實例變數:為什麼列表同時顯示為兩者? * 理解Python類別和實例變數:的詳細內容。更多資訊請關注PHP中文網其他相關文章!