久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

詳解python方法之綁定方法與非綁定方法

瀏覽:40日期:2022-07-13 16:32:28

寫在之前

在 Python 的類里面除了屬性之外,還有方法,當(dāng)然也有文檔和注釋這類東西,但是這個(gè)只是人來看,計(jì)算機(jī)則不關(guān)心。我們之前說過,我們一般用實(shí)例調(diào)用方法,既然我們說了是一般,那么就說明還有其他調(diào)用方法的方式,今天我們就來說一下「綁定方法和非綁定方法」。

綁定方法和非綁定方法

在 Python 中除了特殊方法以外,類中的其他普通方法也是經(jīng)常用到的,所以對(duì)于普通的方法也要進(jìn)行研究,下面我們來看一個(gè)例子:

>>> class Sample:... def f(self):... print(’f function is a normal method’)...>>> sam = Sample()>>> sam.ff function is a normal method

從我們之前的學(xué)習(xí)中你知道,在類 sample 中,方法 f() 本質(zhì)上是一個(gè)函數(shù),只不過這個(gè)函數(shù)的第一個(gè)參數(shù)必須是 self,當(dāng)然了,為了區(qū)別我們?cè)陬愔薪o它起了另外的一個(gè)名字「方法」。但是跟函數(shù)相比,在本質(zhì)上沒什么不同。

當(dāng)創(chuàng)建了實(shí)例以后,我們?cè)谟脤?shí)例調(diào)用這個(gè)方法的時(shí)候,因?yàn)?Python 解釋器已經(jīng)把實(shí)例作為第一個(gè)參數(shù)隱式的傳給了該方法,所以 self 這個(gè)參數(shù)不需要顯式的寫出來,這個(gè)知識(shí)點(diǎn)我反復(fù)說了很多次,就是為了能讓大家理解 self 是實(shí)例!

如果想要把實(shí)例顯式的傳給方法,可以用下面的方式:

>>> Sample.f(sam)f function is a normal method

用上述方法能更好的證明前面的觀點(diǎn),即實(shí)例化以后,self 和實(shí)例 sam 是相同的。一般情況下我們?cè)兕惱锩媸褂?self,在類外面使用 sam,二者各有分工。

那如果我們?cè)谟妙愓{(diào)用方法的時(shí)候,不傳實(shí)例會(huì)發(fā)生什么呢?

>>> Sample.f()Traceback (most recent call last): File '<stdin>', line 1, in <module>TypeError: unbound method f() must be called with Sample instance as first argument (got nothing instead)

答案是會(huì)報(bào)錯(cuò),我們仔細(xì)看一下是因?yàn)槿鄙倭艘粋€(gè)參數(shù),它是一個(gè)實(shí)例,所以我們要傳一個(gè)實(shí)例。

Python 中的一切都是對(duì)象,所以類 Sample 的方法 f() 也是對(duì)象,具體點(diǎn)說是一個(gè)函數(shù)對(duì)象,那么我們可以像下面這樣來獲得該對(duì)象:

>>> Sample.f<function Sample.f at 0x000000000244AB48>

當(dāng)然我們也可以通過實(shí)例來獲得對(duì)象:

>>> sam.f<bound method Sample.f of <__main__.sample instance at 0x000000000244AB48>>

上面用實(shí)例來得到這個(gè)方法對(duì)象,在這里我們看到是「綁定方法」(bound method)。

下面就要逐漸接近 “綁定方法” 和 “非綁定方法” 的概念本質(zhì)了。

在類 Sample 的屬性中,有一個(gè)叫 __dict__ 的屬性方法,我們?cè)谇懊娴奈恼轮幸步榻B過,我們接下來就用它來看一下類的內(nèi)部信息:

>>> sample.__dict__[’f’]<function f at 0x000000000250D828>

從上面來看,可以近一步的說明 f 是一個(gè)函數(shù)對(duì)象。

接下來讓我們學(xué)習(xí)一個(gè)新的知識(shí)叫做「描述器」,那么什么是描述器呢?在 Python 中有幾個(gè)比較特殊的特殊方法,分別是 __get__(),__set__() 和 __delete__(),稍微簡(jiǎn)單點(diǎn)來說,有這些特殊方法的對(duì)象就叫做「描述器」。

描述器在 Python 中使用廣泛,如果你還記得我講過的 super,它是屬性,實(shí)例方法,繼承等使用 super 的背后實(shí)現(xiàn)機(jī)制。關(guān)于描述器的內(nèi)容,在這做具體的說明,在這里提到它,純粹是為了解決綁定方法和非綁定方法的問題。所以如果你有興趣的話,可以自行 Google。

我們?cè)谶@里僅看一下 __get__() ,關(guān)于它的所謂的描述器協(xié)議如下:

des.__get__(self,obj,type=None) ---> value

具體應(yīng)用到上面的那個(gè)例子則是如下操作:

>>> sample.__dict__[’f’].__get__(sam,sample)<bound method sample.f of <__main__.sample instance at 0x000000000244AB48>>

你可以發(fā)現(xiàn)上面顯示的結(jié)果和 sam.f 是一樣的。所以綜上,我們可以認(rèn)為:當(dāng)通過類來獲取方法的時(shí)候,得到的是非綁定方法對(duì)象;當(dāng)通過實(shí)例來獲取方法的時(shí)候,得到的是綁定方法對(duì)象。

寫在之后

綁定方法和非綁定方法到這就結(jié)束了,類的方法可分為不少,除了綁定方法和非綁定方法以外,還有靜態(tài)方法和類方法等,我會(huì)在接下來依次的進(jìn)行介紹,敬請(qǐng)期待。

寫出來的東西是我的,看進(jìn)去的東西才是你的,希望你不要浪費(fèi)自己的時(shí)間,要學(xué)有所得。如果你覺得文章對(duì)你有幫助的話,歡迎你點(diǎn)贊轉(zhuǎn)發(fā),謝謝支持。

The end。

以上就是詳解python方法之綁定方法與非綁定方法的詳細(xì)內(nèi)容,更多關(guān)于python 綁定方法與非綁定方法的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 日韩艹逼视频 | 日韩精品一区二区三区四区视频 | 国产91网| 国产精品99久久 | 午夜av影视| 99精品网 | 中文字幕久久精品 | 婷婷综合| 天天综合91 | 亚洲成人精品一区二区三区 | 激情久久av一区av二区av三区 | 欧美一区二区视频 | 午夜免费小视频 | 欧美男人天堂网 | 国产99久久精品 | 91色电影 | 国产福利在线播放 | 在线手机电影 | 久久久久久久久成人 | 亚洲欧美综合精品久久成人 | www.久久久 | 在线观看欧美一区 | 色综合一区二区三区 | 91精品国产综合久久福利软件 | 无码日韩精品一区二区免费 | 在线观看av网站永久 | 精品国产一区二区三区久久影院 | 日韩素人一区二区三区 | 97久久久 | 99视频在线播放 | 另类亚洲专区 | av一区二区三区四区 | 国产精品一区二区三区四区 | 综合一区| 日日夜夜免费精品视频 | 欧日韩不卡在线视频 | 91精品国产人妻国产毛片在线 | 中文字幕日韩欧美 | 中文字幕第一页在线 | 国产www视频| 在线观看国精产品二区1819 |