您好,登錄后才能下訂單哦!
小編給大家分享一下Python必須在方法定義和調(diào)用中顯示使用“self”的原因,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討方法吧!
為什么Python必須在方法定義和調(diào)用中顯示使用“self”?
這個想法借鑒了 Modula-3 語言。出于多種原因它被證明是非常有用的。
首先,更明顯的顯示出,使用的是方法或?qū)嵗龑傩远皇蔷植孔兞俊?/strong>
閱讀 self.x 或 self.meth() 可以清楚地表明,即使您不知道類的定義,也會使用實例變量或方法。
在 C++ 中,可以通過缺少局部變量聲明來判斷(假設(shè)全局變量很少見或容易識別) —— 但是在 Python 中沒有局部變量聲明,所以必須查找類定義才能確定。
一些 C++ 和 Java 編碼標(biāo)準(zhǔn)要求實例屬性具有 m_ 前綴,因此這種顯式性在這些語言中仍然有用。
其次,這意味著如果要顯式引用或從特定類調(diào)用該方法,不需要特殊語法。
在 C++ 中,如果你想使用在派生類中重寫基類中的方法,你必須使用 :: 運算符 -- 在 Python 中你可以編寫 baseclass.methodname(self, <argumentlist>)。
這對于 __init__() 方法非常有用,特別是在派生類方法想要擴展同名的基類方法,而必須以某種方式調(diào)用基類方法時。
最后,它解決了變量賦值的語法問題:
為了 Python 中的局部變量(根據(jù)定義?。┰诤瘮?shù)體中賦值的那些變量(并且沒有明確聲明為全局)賦值,就必須以某種方式告訴解釋器一個賦值是為了分配一個實例變量而不是一個局部變量,它最好是通過語法實現(xiàn)的(出于效率原因)。
C++ 通過聲明來做到這一點,但是 Python 沒有聲明,僅僅為了這個目的而引入它們會很可惜。
使用顯式的 self.var 很好地解決了這個問題。類似地,對于使用實例變量,必須編寫 self.var 意味著對方法內(nèi)部的非限定名稱的引用不必搜索實例的目錄。
換句話說,局部變量和實例變量存在于兩個不同的命名空間中,您需要告訴 Python 使用哪個命名空間。
看完了這篇文章,相信你對Python必須在方法定義和調(diào)用中顯示使用“self”的原因有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。