最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年08月17日 11:39:04   作者:Rocky0429  
這篇文章主要介紹了python方法之綁定方法與非綁定方法的相關資料,幫助大家更好的理解和學習python,感興趣的朋友可以了解下

寫在之前

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

綁定方法和非綁定方法

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

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

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

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

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

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

用上述方法能更好的證明前面的觀點,即實例化以后,self 和實例 sam 是相同的。一般情況下我們再類里面使用 self,在類外面使用 sam,二者各有分工。

那如果我們在用類調(diào)用方法的時候,不傳實例會發(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)

答案是會報錯,我們仔細看一下是因為缺少了一個參數(shù),它是一個實例,所以我們要傳一個實例。

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

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

當然我們也可以通過實例來獲得對象:

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

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

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

在類 Sample 的屬性中,有一個叫 __dict__ 的屬性方法,我們在前面的文章中也介紹過,我們接下來就用它來看一下類的內(nèi)部信息:

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

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

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

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

我們在這里僅看一下 __get__() ,關于它的所謂的描述器協(xié)議如下:

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

具體應用到上面的那個例子則是如下操作:

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

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

寫在之后

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

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

The end。

以上就是詳解python方法之綁定方法與非綁定方法的詳細內(nèi)容,更多關于python 綁定方法與非綁定方法的資料請關注腳本之家其它相關文章!

相關文章

  • Python解析微信dat文件的方法

    Python解析微信dat文件的方法

    這篇文章主要介紹了Python解析微信dat文件的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 教你怎么用Python處理excel實現(xiàn)自動化辦公

    教你怎么用Python處理excel實現(xiàn)自動化辦公

    這篇文章主要介紹了教你怎么用Python處理excel實現(xiàn)自動化辦公,文中有非常詳細的代碼示例,對正在學習python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python3簡單爬蟲抓取網(wǎng)頁圖片代碼實例

    Python3簡單爬蟲抓取網(wǎng)頁圖片代碼實例

    這篇文章主要介紹了Python3簡單爬蟲抓取網(wǎng)頁圖片代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Python環(huán)境Pillow( PIL )圖像處理工具使用解析

    Python環(huán)境Pillow( PIL )圖像處理工具使用解析

    這篇文章主要介紹了Python環(huán)境Pillow( PIL )圖像處理工具使用解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Python面向?qū)ο缶幊讨庋b的藝術(shù)你了解嗎

    Python面向?qū)ο缶幊讨庋b的藝術(shù)你了解嗎

    這篇文章主要為大家詳細介紹了Python面向?qū)ο缶幊讨庋b的藝術(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 最近Python有點火? 給你7個學習它的理由!

    最近Python有點火? 給你7個學習它的理由!

    最近Python有點火?這篇文章主要為大家分享了7個你現(xiàn)在就該學習Python的理由,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • python http接口自動化腳本詳解

    python http接口自動化腳本詳解

    這篇文章主要為大家詳細介紹了python http接口自動化腳本,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python組合數(shù)據(jù)類型詳解

    Python組合數(shù)據(jù)類型詳解

    這篇文章主要介紹了Python組合數(shù)據(jù)類型詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • python實現(xiàn)斗地主分牌洗牌

    python實現(xiàn)斗地主分牌洗牌

    這篇文章主要為大家詳細介紹了python實現(xiàn)斗地主分牌洗牌,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Django Admin設置應用程序及模型順序方法詳解

    Django Admin設置應用程序及模型順序方法詳解

    這篇文章主要介紹了Django Admin設置應用程序及模型順序方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04

最新評論

启东市| 汤原县| 邵武市| 金门县| 和平区| 华坪县| 界首市| 昌宁县| 陇南市| 普宁市| 嘉定区| 弋阳县| 岳阳县| 任丘市| 奉节县| 西宁市| 东海县| 高淳县| 遂溪县| 互助| 蒲江县| 乌什县| 太和县| 沅江市| 山东| 肥东县| 辽源市| 保德县| 常宁市| 堆龙德庆县| 桦甸市| 常山县| 铁力市| 称多县| 保靖县| 南宫市| 曲麻莱县| 镇安县| 正安县| 望都县| 仪陇县|