深入研究類別和實例方法的細微差別:Beyond Self 與Cls
Python 增強提案(PEPself”作為實例方法中的第一個參數,「cls」作為類別方法中的第一個參數。這種差異源自於這些方法在處理實例和類別時所扮演的不同角色。
實例方法:自身優勢
實例方法在實例的實例上呼叫班級。它們通常與特定實例的特定屬性和行為互動。這些方法的第一個參數是 self,它代表呼叫方法的實例。
例如,下面的類別定義了一個「引入」實例方法:
<code class="python">class Inst: def __init__(self, name): self.name = name def introduce(self): print("Hello, I am %s, and my name is %s" % (self, self.name))</code>
當我們建立Inst 類別的實例並呼叫其「introduce」方法時,實例本身作為self 參數傳遞,允許我們存取其屬性(在本例中為“name”屬性)。
類別方法:擁抱 Cls
另一方面,類別方法會對類別本身而不是單一實例進行操作。它們允許我們修改或檢查類別結構或行為。這些方法的第一個參數是 cls,它代表呼叫該方法的類別。
以下範例說明了類別方法:
<code class="python">class Cls: @classmethod def introduce(cls): print("Hello, I am %s!" % cls)</code>
此方法不需要一個實例,因為它不會與特定物件屬性互動。相反,它對類別本身進行操作,提供有關其結構的資訊。
類別方法在從父類別繼承時特別有用,因為它們允許子類別修改或擴展父類別的行為。例如,下面的子類別重寫了Cls 類別的“introduce”方法:
<code class="python">class SubCls(Cls): pass SubCls.introduce() # outputs: Hello, I am <class 'SubCls'></code>
透過使用“cls”作為第一個參數,可以直接在子類別上呼叫“introduce”方法,從而允許它定義自己的行為,同時仍然存取從父類別繼承的屬性。
以上是Python 中的實例方法與類別方法:什麼時候應該使用'self”和'cls”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!