成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python為為什么要儲存顯式self

89542767 / 425人閱讀

  全文詳細(xì)描述Python為為什么要儲存顯式self,文中依據(jù)案例編碼介紹的十分詳盡,對大家課程的學(xué)習(xí)、學(xué)習(xí)培訓(xùn)或工作也有極強(qiáng)的參照學(xué)習(xí)培訓(xùn)和考核實(shí)用價值。務(wù)必陪我共同進(jìn)步。


  Bruce的提議


  Bruce了解,大家一般用一個方法來劃分實(shí)例變量的引進(jìn)和其它自變量的引進(jìn),因而他建議“self”設(shè)定關(guān)鍵詞。


  充分考慮最具代表性的一類,生活中有一個方法,比如:


  class C:
  def meth(self,arg):
  self.val=arg
  return self.val
  根據(jù)Bruce這將會改成:
  class C:
  def meth(arg):#Look ma,no self!
  self.val=arg
  return self.val


  那樣,每一種方式將節(jié)約6字符。但我不這樣認(rèn)為Bruce這一建議就是為減少電腦打字。


  我覺得他真真正正在意的是程序猿浪費(fèi)時長(很有可能來源于外國語言),有時候好像不用特定“self”主要參數(shù),她們有時候忘掉加上(即便她們比較清楚——習(xí)慣是一種無窮的力量)。實(shí)際上,在引入實(shí)例自變量或方式之前忘掉鍵入“self.”比較之下,省去了參數(shù)列表“self”,通常會造成十分模糊不清的錯誤報(bào)告。


  或許更糟糕是指(比如Bruce上述),當(dāng)方式被恰當(dāng)表明,但啟用時主要參數(shù)總數(shù)不校時,這時接收到的錯誤報(bào)告。Bruce下列事例:


  我答應(yīng)這也是令人困惑的,但我情愿處理這一不正確消息,而非改動語言表達(dá)。


  為什么Bruce建議行不通


  最先,要我提些Bruce典型性論點(diǎn)論據(jù)的反過來提議。


  Traceback(most recent call last):
  File"classes.py",line 9,in
  obj.m2(1)
  TypeError:m2()takes exactly 3 arguments(2 given)

  有非常好的論點(diǎn)論據(jù)能證明在參數(shù)列表中應(yīng)用顯式“self”本質(zhì)上能增強(qiáng)下列二種調(diào)用方法的等效性?!癴oo”是“C”1個事例:


  foo.meth(arg)==C.meth(foo,arg)

  (坦白說,我不理解這個案例的意味。下列僅僅是個人見解。在類內(nèi)部結(jié)構(gòu)聲明數(shù)組中,可能有幾類不同類型的方式:實(shí)例方法、類方法與靜態(tài)方法。他們角色與行為是不一樣的,那樣怎么區(qū)分界定和啟用呢?Python約定好一個方法,則在界定時要第一位主要參數(shù)來劃分:self表示案例法,cls或其它矩陣表示類方式……這三種方式如同兩個扁豆相同,看上去完全一致,如同上事例的左邊等于號相同。這時,應(yīng)依據(jù)界定時給的主要參數(shù)開展區(qū)劃。比如,在墻上實(shí)例等于號的右側(cè),第一位主要參數(shù)是實(shí)例對象,表示此處是實(shí)例方式。


  另外論點(diǎn)論據(jù)要在參數(shù)列表中應(yīng)用顯式“self”將一個函數(shù)插進(jìn)一個類,得到動態(tài)性改動1個類水平,并建立對應(yīng)的類方式。


  比如,大家可以在上構(gòu)建一個“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”主要參數(shù)重新命名為“myself”為了能注重(在語法結(jié)構(gòu)上),我們并沒有在這兒界定一個方法(漢語翻譯注:類外界是函數(shù)公式,其實(shí)就是函數(shù)公式,換句話說,function,內(nèi)部方式,即method)。


  那樣以后,C有個事例“meth”方式,此方法有個主要參數(shù),并且作用與之前相同。它乃至適用在插入方式類之前建立的C的事例。


  我覺得Bruce我不在意前面提到的等效性。我答應(yīng)那只是理論的必要性。我最想得到的除外便是老式啟用非常方式的組成(idiom)??墒?,這一組成非常容易出差錯(也正是因?yàn)樗鼊?wù)必顯式傳送("self"緣故),這也是為什么Python在3000中,個人覺得在大多數(shù)前提下使用這些"super()"的主要原因。


  Bruce你很有可能都會想到一個方法來讓第2個等效電路案例——在一些前提下,這類等效電路至關(guān)重要。我也不知道Bruce我花多少時長想著如何完成它的提議,但我覺得他正在努力將一個稱為“self”在類上直接界定的全部方式全部方式的念頭(我不得不說成“直接的”那樣,嵌入在方式里的函數(shù)公式就能避免這類自動操作)。用這種方式,第一位等效電路案例可以維持等效電路。


  可是,有一種方法我覺得Bruce未與編譯程序加上某些東西根本不可能ESP解決方法:裝飾設(shè)計(jì)設(shè)備。我我想這是Bruce最后不成功的提議。


  在我們裝飾設(shè)計(jì)一個方法時,誰也不知道是否該全自動加上它“self”主要參數(shù):裝飾設(shè)計(jì)設(shè)備能將函數(shù)公式轉(zhuǎn)換成靜態(tài)方法(不“self”)或類方式(有個有意思的方式(self,它偏向一個類,而不只是事例),或是它能夠做些截然不同的事兒(純粹應(yīng)用Python完成“classmethod”或“staticmethod”裝飾設(shè)計(jì)設(shè)備很繁瑣)。如果你了解裝飾器的用處,不然沒有別的方式來再決定是否得出一類掩藏的方法去界定它“self”主要參數(shù)。


  我拒絕獨(dú)特外包裝等“classmethod”和“staticmethod”高科技什么的。我還認(rèn)為,除開自查以外,全自動明確一個方法是一類方式(classmethod),實(shí)例方法(instancemethod)依然靜止的(staticmethod),這個不是一個好辦法(如同)Bruce在文章中的評論里,有些人提議):這也使得難以只遵照方式以前的方式“def”,確定怎樣調(diào)這個方法。


  (漢語翻譯注:針對一個方法,在加上相對應(yīng)參數(shù)當(dāng)前情況下,能夠簡單的加上裝飾器來劃分這是什么樣的方法,而且在啟用時非常容易區(qū)別啟用;可是,要是沒有加上主要參數(shù),即便大家可以應(yīng)用奇妙的全自動體制來劃分這是什么樣的方法,你也不確定在啟用時怎樣啟用)。

  def foo(self,arg):...


  在評論里,我看見了某些十分極端化對Bruce建議的附合,但一般代價也是很難遵守規(guī)則,或需要深層次的語言表達(dá)改動,這也使得大家極為無法接受,特別是合拼Python3.1.順便說一下,對3..1、再度申明我們自己的標(biāo)準(zhǔn),新特點(diǎn)僅有在保證向后兼容的情形下才可以接納。

  def self.foo(arg):...


  有個看起來切實(shí)可行的提議(能使其向后兼容)是類中的意見


  classmethod
  def cls.foo(arg):...


  好啦,和現(xiàn)在的狀況對比,我喜歡這個。Bruce我覺得它的blog發(fā)表評論所提出的提議或者更極端化這樣的說法要好很多,并且其具有向后兼容性極大的優(yōu)點(diǎn),能用參照完成而無需太多勤奮PEP。(我覺得Bruce假如他確實(shí)勤奮寫下可信賴的文章內(nèi)容,他大概自身提議中的不足PEP或嘗試完成它。


  綜上所述,這篇文章就給大家介紹完畢,希望可以給大家?guī)韼椭?/p>

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/128851.html

相關(guān)文章

  • SICP Python 描述 第五章 序列和協(xié)程

    摘要:消息向迭代器獲取所表示的底層序列的下一個元素。為了對方法調(diào)用做出回應(yīng),迭代器可以執(zhí)行任何計(jì)算來獲取或計(jì)算底層數(shù)據(jù)序列的下一個元素。這個迭代器應(yīng)擁有方法,依次返回序列中的每個元素,最后到達(dá)序列末尾時產(chǎn)生異常。 第五章 序列和協(xié)程 來源:Chapter 5: Sequences and Coroutines 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 5.1 引言 在這一章中,我...

    leap_frog 評論0 收藏0
  • SICP Python 描述 2.7 泛用方法

    摘要:使用消息傳遞,我們就能使抽象數(shù)據(jù)類型直接擁有行為。構(gòu)造器以類似的方式實(shí)現(xiàn)它在參數(shù)上調(diào)用了叫做的方法。抽象數(shù)據(jù)類型允許我們在數(shù)據(jù)表示和用于操作數(shù)據(jù)的函數(shù)之間構(gòu)造界限。 2.7 泛用方法 來源:2.7 Generic Operations 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 這一章中我們引入了復(fù)合數(shù)據(jù)類型,以及由構(gòu)造器和選擇器實(shí)現(xiàn)的數(shù)據(jù)抽象機(jī)制。使用消息傳遞,我們就能...

    leanote 評論0 收藏0
  • [譯] 與 Python 無縫集成——基本特殊方法 3

    摘要:比較運(yùn)算符方法有六個比較運(yùn)算符。根據(jù)文檔,其映射工作如下第七章創(chuàng)建數(shù)字我們會再次回到比較運(yùn)算符這塊。同一個類的對象的比較實(shí)現(xiàn)我們來看看一個簡單的同一類的比較通過觀察一個更完整的類現(xiàn)在我們已經(jīng)定義了所有六個比較運(yùn)算符。 注:原書作者 Steven F. Lott,原書名為 Mastering Object-oriented Python __bool__()方法 Python對假有個很...

    2json 評論0 收藏0
  • django rest framework個人學(xué)習(xí)筆記(六)————Tutorial4.認(rèn)證于授權(quán)

    摘要:另外一個字段用于儲存突出顯示的代碼的表示形式。這將確保認(rèn)證用戶擁有讀寫權(quán)限,而未認(rèn)證用戶只有讀的權(quán)限。唯一的限制是必須是。 官網(wǎng)地址目前,我們的API沒有對如 edit 或者 delect做出任何限制。我們希望有一些更加高級的功能能夠做到: Code snippets 應(yīng)該永遠(yuǎn)和創(chuàng)建者相關(guān) 只有認(rèn)證的用戶才能夠創(chuàng)建snippets 只有創(chuàng)建者才能更新或者刪除他的snippet 沒有認(rèn)...

    eternalshallow 評論0 收藏0
  • django rest framework個人學(xué)習(xí)筆記(六)————Tutorial4.認(rèn)證于授權(quán)

    摘要:另外一個字段用于儲存突出顯示的代碼的表示形式。這將確保認(rèn)證用戶擁有讀寫權(quán)限,而未認(rèn)證用戶只有讀的權(quán)限。唯一的限制是必須是。 官網(wǎng)地址目前,我們的API沒有對如 edit 或者 delect做出任何限制。我們希望有一些更加高級的功能能夠做到: Code snippets 應(yīng)該永遠(yuǎn)和創(chuàng)建者相關(guān) 只有認(rèn)證的用戶才能夠創(chuàng)建snippets 只有創(chuàng)建者才能更新或者刪除他的snippet 沒有認(rèn)...

    MonoLog 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<