全文詳細描述Python為為什么要儲存顯式self,文中依據案例編碼介紹的十分詳盡,對大家課程的學習、學習培訓或工作也有極強的參照學習培訓和考核實用價值。務必陪我共同進步。
Bruce的提議
Bruce了解,大家一般用一個方法來劃分實例變量的引進和其它自變量的引進,因而他建議“self”設定關鍵詞。
充分考慮最具代表性的一類,生活中有一個方法,比如:
class C: def meth(self,arg): self.val=arg return self.val 根據Bruce這將會改成: class C: def meth(arg):#Look ma,no self! self.val=arg return self.val
那樣,每一種方式將節約6字符。但我不這樣認為Bruce這一建議就是為減少電腦打字。
我覺得他真真正正在意的是程序猿浪費時長(很有可能來源于外國語言),有時候好像不用特定“self”主要參數,她們有時候忘掉加上(即便她們比較清楚——習慣是一種無窮的力量)。實際上,在引入實例自變量或方式之前忘掉鍵入“self.”比較之下,省去了參數列表“self”,通常會造成十分模糊不清的錯誤報告。
或許更糟糕是指(比如Bruce上述),當方式被恰當表明,但啟用時主要參數總數不校時,這時接收到的錯誤報告。Bruce下列事例:
我答應這也是令人困惑的,但我情愿處理這一不正確消息,而非改動語言表達。
為什么Bruce建議行不通
最先,要我提些Bruce典型性論點論據的反過來提議。
Traceback(most recent call last): File"classes.py",line 9,in obj.m2(1) TypeError:m2()takes exactly 3 arguments(2 given)
有非常好的論點論據能證明在參數列表中應用顯式“self”本質上能增強下列二種調用方法的等效性。“foo”是“C”1個事例:
foo.meth(arg)==C.meth(foo,arg)
(坦白說,我不理解這個案例的意味。下列僅僅是個人見解。在類內部結構聲明數組中,可能有幾類不同類型的方式:實例方法、類方法與靜態方法。他們角色與行為是不一樣的,那樣怎么區分界定和啟用呢?Python約定好一個方法,則在界定時要第一位主要參數來劃分:self表示案例法,cls或其它矩陣表示類方式……這三種方式如同兩個扁豆相同,看上去完全一致,如同上事例的左邊等于號相同。這時,應依據界定時給的主要參數開展區劃。比如,在墻上實例等于號的右側,第一位主要參數是實例對象,表示此處是實例方式。
另外論點論據要在參數列表中應用顯式“self”將一個函數插進一個類,得到動態性改動1個類水平,并建立對應的類方式。
比如,大家可以在上構建一個“C”徹底等效電路的類,具體如下:
#Define an empty class: class C: pass #Define a global function: def meth(myself,arg): myself.val=arg return myself.val #Poke the method into the class: C.meth=meth
一定要注意,我將會“self”主要參數重新命名為“myself”為了能注重(在語法結構上),我們并沒有在這兒界定一個方法(漢語翻譯注:類外界是函數公式,其實就是函數公式,換句話說,function,內部方式,即method)。
那樣以后,C有個事例“meth”方式,此方法有個主要參數,并且作用與之前相同。它乃至適用在插入方式類之前建立的C的事例。
我覺得Bruce我不在意前面提到的等效性。我答應那只是理論的必要性。我最想得到的除外便是老式啟用非常方式的組成(idiom)。可是,這一組成非常容易出差錯(也正是因為它務必顯式傳送("self"緣故),這也是為什么Python在3000中,個人覺得在大多數前提下使用這些"super()"的主要原因。
Bruce你很有可能都會想到一個方法來讓第2個等效電路案例——在一些前提下,這類等效電路至關重要。我也不知道Bruce我花多少時長想著如何完成它的提議,但我覺得他正在努力將一個稱為“self”在類上直接界定的全部方式全部方式的念頭(我不得不說成“直接的”那樣,嵌入在方式里的函數公式就能避免這類自動操作)。用這種方式,第一位等效電路案例可以維持等效電路。
可是,有一種方法我覺得Bruce未與編譯程序加上某些東西根本不可能ESP解決方法:裝飾設計設備。我我想這是Bruce最后不成功的提議。
在我們裝飾設計一個方法時,誰也不知道是否該全自動加上它“self”主要參數:裝飾設計設備能將函數公式轉換成靜態方法(不“self”)或類方式(有個有意思的方式(self,它偏向一個類,而不只是事例),或是它能夠做些截然不同的事兒(純粹應用Python完成“classmethod”或“staticmethod”裝飾設計設備很繁瑣)。如果你了解裝飾器的用處,不然沒有別的方式來再決定是否得出一類掩藏的方法去界定它“self”主要參數。
我拒絕獨特外包裝等“classmethod”和“staticmethod”高科技什么的。我還認為,除開自查以外,全自動明確一個方法是一類方式(classmethod),實例方法(instancemethod)依然靜止的(staticmethod),這個不是一個好辦法(如同)Bruce在文章中的評論里,有些人提議):這也使得難以只遵照方式以前的方式“def”,確定怎樣調這個方法。
(漢語翻譯注:針對一個方法,在加上相對應參數當前情況下,能夠簡單的加上裝飾器來劃分這是什么樣的方法,而且在啟用時非常容易區別啟用;可是,要是沒有加上主要參數,即便大家可以應用奇妙的全自動體制來劃分這是什么樣的方法,你也不確定在啟用時怎樣啟用)。
def foo(self,arg):...
在評論里,我看見了某些十分極端化對Bruce建議的附合,但一般代價也是很難遵守規則,或需要深層次的語言表達改動,這也使得大家極為無法接受,特別是合拼Python3.1.順便說一下,對3..1、再度申明我們自己的標準,新特點僅有在保證向后兼容的情形下才可以接納。
def self.foo(arg):...
有個看起來切實可行的提議(能使其向后兼容)是類中的意見
classmethod def cls.foo(arg):...
好啦,和現在的狀況對比,我喜歡這個。Bruce我覺得它的blog發表評論所提出的提議或者更極端化這樣的說法要好很多,并且其具有向后兼容性極大的優點,能用參照完成而無需太多勤奮PEP。(我覺得Bruce假如他確實勤奮寫下可信賴的文章內容,他大概自身提議中的不足PEP或嘗試完成它。
綜上所述,這篇文章就給大家介紹完畢,希望可以給大家帶來幫助。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/128851.html
摘要:消息向迭代器獲取所表示的底層序列的下一個元素。為了對方法調用做出回應,迭代器可以執行任何計算來獲取或計算底層數據序列的下一個元素。這個迭代器應擁有方法,依次返回序列中的每個元素,最后到達序列末尾時產生異常。 第五章 序列和協程 來源:Chapter 5: Sequences and Coroutines 譯者:飛龍 協議:CC BY-NC-SA 4.0 5.1 引言 在這一章中,我...
摘要:使用消息傳遞,我們就能使抽象數據類型直接擁有行為。構造器以類似的方式實現它在參數上調用了叫做的方法。抽象數據類型允許我們在數據表示和用于操作數據的函數之間構造界限。 2.7 泛用方法 來源:2.7 Generic Operations 譯者:飛龍 協議:CC BY-NC-SA 4.0 這一章中我們引入了復合數據類型,以及由構造器和選擇器實現的數據抽象機制。使用消息傳遞,我們就能...
摘要:比較運算符方法有六個比較運算符。根據文檔,其映射工作如下第七章創建數字我們會再次回到比較運算符這塊。同一個類的對象的比較實現我們來看看一個簡單的同一類的比較通過觀察一個更完整的類現在我們已經定義了所有六個比較運算符。 注:原書作者 Steven F. Lott,原書名為 Mastering Object-oriented Python __bool__()方法 Python對假有個很...
摘要:另外一個字段用于儲存突出顯示的代碼的表示形式。這將確保認證用戶擁有讀寫權限,而未認證用戶只有讀的權限。唯一的限制是必須是。 官網地址目前,我們的API沒有對如 edit 或者 delect做出任何限制。我們希望有一些更加高級的功能能夠做到: Code snippets 應該永遠和創建者相關 只有認證的用戶才能夠創建snippets 只有創建者才能更新或者刪除他的snippet 沒有認...
摘要:另外一個字段用于儲存突出顯示的代碼的表示形式。這將確保認證用戶擁有讀寫權限,而未認證用戶只有讀的權限。唯一的限制是必須是。 官網地址目前,我們的API沒有對如 edit 或者 delect做出任何限制。我們希望有一些更加高級的功能能夠做到: Code snippets 應該永遠和創建者相關 只有認證的用戶才能夠創建snippets 只有創建者才能更新或者刪除他的snippet 沒有認...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1982·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02