天天看點

Python 進階_OOP 面向對象程式設計_self 的執行個體綁定目錄self 和綁定調用非綁定的方法

<a href="#%E7%9B%AE%E5%BD%95">目錄</a>

<a href="#self-%E5%92%8C%E7%BB%91%E5%AE%9A">self 和綁定</a>

<a href="#%E8%B0%83%E7%94%A8%E9%9D%9E%E7%BB%91%E5%AE%9A%E7%9A%84%E6%96%B9%E6%B3%95">調用非綁定的方法</a>

在 Python 中 self 變量是特殊的, 其用于在執行個體方法中引用該方法所綁定的執行個體, 換句話說就是 Python 在執行個體化對象時會自動的将執行個體對象傳遞到類體的 self 變量中, 類體中的 self 變量代表了該類的執行個體對象. 執行個體方法無論在任何地方被調用, 執行個體對象總是作為第一個參數被傳遞進去, 進而實作了執行個體對象和執行個體方法的綁定, 這也是為什麼同一個類可以執行個體化多個不同的執行個體化對象的原因之一.

是以, 當我們定義類執行個體方法, 在方法聲明語句的參數清單中必須設定名為 self 的形參. 這也是類執行個體方法和正常方法最大的差別之一.

EXAMPLE:

那我們是不是不通過執行個體對象就一定沒辦法調用類執行個體方法了呢?

答案是否定的!

調用類執行個體方法的本質就是要傳遞一個執行個體對象到該方法中作為第一個實參. 我們在定義類執行個體方法的時候将 self 變量作為方法的第一個形參, 這樣做為我們帶來的好處在于, 我們通過執行個體對象去調用該類執行個體方法時, 不需要顯式的傳遞執行個體對象自身給 self 形參, 這一切都交由 Python 解析器去做. 相反, 如果我們希望不需要通過執行個體對象就能調用類執行個體方法, 那麼我們就顯式的将執行個體對象傳入吧.

調用非綁定方法最常間的場景就是, 我們在派生一個子類, 并且希望在子類中覆寫父類的同名方法(重載).

EXSMPLE:

在這個例子中, 我們在子類的構造器中調用了父類的構造器, 并且顯式的傳遞了父類構造器所需要的 self 實參 <code>__init__(self, name)</code> 中, 是以我們可以通過類名結合句點辨別符的方式來調用父類的執行個體方法 <code>AClass.__init__(self, name)</code> .

當然, 我們之前的博文中也介紹過這種時候我們建議通過 super()内置方法來實作.