欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python3里的super()和__class__使用介紹

 更新時(shí)間:2015年04月23日 09:22:15   作者:依云  
這篇文章主要介紹了Python3里的super()和__class__使用介紹,本文用實(shí)例講解了這兩個(gè)方法之間的關(guān)系,需要的朋友可以參考下

子類里訪問(wèn)父類的同名屬性,而又不想直接引用父類的名字,因?yàn)檎f(shuō)不定什么時(shí)候會(huì)去修改它,所以數(shù)據(jù)還是只保留一份的好。其實(shí)呢,還有更好的理由不去直接引用父類的名字,參見(jiàn) 。

這時(shí)候就該 super() 登場(chǎng)啦——

復(fù)制代碼 代碼如下:

class A:
  def m(self):
    print('A')

class B(A):
  def m(self):
    print('B')
    super().m()

B().m()


當(dāng)然 Python 2 里 super() 是一定要參數(shù)的,所以得這么寫(xiě):
復(fù)制代碼 代碼如下:

class B(A):
  def m(self):
    print('B')
    super(B, self).m()

需要提到自己的名字。這個(gè)名字也是動(dòng)態(tài)查找的,在這種情況下替換第三方庫(kù)中的類會(huì)出問(wèn)題。

super() 很好地解決了訪問(wèn)父類中的方法的問(wèn)題。那么,如果要訪問(wèn)父類的父類(準(zhǔn)確地說(shuō),是方法解析順序(MRO)中位于第三的類)的屬性呢?

比如,B 類是繼承 A 的,它重寫(xiě)了 A 的 m 方法。現(xiàn)在我們需要一個(gè) C 類,它需要 B 類的一些方法,但是不要 B 的 m 方法,而改用 A 的。怎么間接地引用到 A 的 m 方法呢?使用self.__class__肯定是不行的,因?yàn)?C 還可能被進(jìn)一步繼承。

從文檔中我注意到,super 的實(shí)現(xiàn)是通過(guò)插入一個(gè)名為 __class__ 的名字來(lái)實(shí)現(xiàn)的(super 會(huì)從調(diào)用棧里去查找這個(gè) __class__ 名字)。所以,就像文檔里暗示的,其實(shí)可以直接在定義方法時(shí)訪問(wèn) __class__ 名字,它總是該方法被定義的類。繼續(xù)我們的單字母類:

復(fù)制代碼 代碼如下:

class C(B):
  def m(self):
    print('C')
    # see the difference!
    print(__class__.__mro__)
    print(self.__class__.__mro__)
    __class__.__mro__[2].m(self)

class D(C):
  def m(self):
    print('D')
    super().m()

o = D()
o.m()


會(huì)得到:
復(fù)制代碼 代碼如下:

D
C
(<class 't.C'>, <class 't.B'>, <class 't.A'>, <class 'object'>)
(<class 't.D'>, <class 't.C'>, <class 't.B'>, <class 't.A'>, <class 'object'>)
A

不過(guò),PyPy 并不支持這個(gè) __class__ 名字。

相關(guān)文章

  • python模塊導(dǎo)入的細(xì)節(jié)詳解

    python模塊導(dǎo)入的細(xì)節(jié)詳解

    這篇文章主要給大家介紹了關(guān)于python模塊導(dǎo)入細(xì)節(jié)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • 通過(guò)Python使用saltstack生成服務(wù)器資產(chǎn)清單

    通過(guò)Python使用saltstack生成服務(wù)器資產(chǎn)清單

    人工去對(duì)每一臺(tái)服務(wù)器的硬件信息并記錄早已經(jīng)過(guò)去了,無(wú)論通過(guò)腳本還是自動(dòng)化工具都是可以進(jìn)行一次編寫(xiě)到處抓取的,本文主要使用saltstack作為使用工具,然后利用其提供的APi編寫(xiě)所需的Python腳本
    2016-03-03
  • 以SQLite和PySqlite為例來(lái)學(xué)習(xí)Python DB API

    以SQLite和PySqlite為例來(lái)學(xué)習(xí)Python DB API

    本文將以SQLite和PySqlite為例來(lái)學(xué)習(xí)Python DB API,pysqlite是一個(gè)sqlite為python 提供的api接口,它讓一切對(duì)于sqlit的操作都變得異常簡(jiǎn)單
    2020-02-02
  • 一文詳解Python定時(shí)任務(wù)觸發(fā)

    一文詳解Python定時(shí)任務(wù)觸發(fā)

    這篇文章主要為大家詳細(xì)介紹了Python定時(shí)任務(wù)觸發(fā)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下
    2023-04-04
  • Python實(shí)現(xiàn)完全數(shù)的示例詳解

    Python實(shí)現(xiàn)完全數(shù)的示例詳解

    完全數(shù),又稱完美數(shù),定義為:這個(gè)數(shù)的所有因數(shù)(不包括這個(gè)數(shù)本身)加起來(lái)剛好等于這個(gè)數(shù)。本文就來(lái)用Python實(shí)現(xiàn)計(jì)算完全數(shù),需要的可以參考一下
    2023-01-01
  • python結(jié)合opencv實(shí)現(xiàn)人臉檢測(cè)與跟蹤

    python結(jié)合opencv實(shí)現(xiàn)人臉檢測(cè)與跟蹤

    在Python下用起來(lái)OpenCV很爽,代碼很簡(jiǎn)潔,很清晰易懂。使用的是Haar特征的分類器,訓(xùn)練之后得到的數(shù)據(jù)存在一個(gè)xml中。下面我們就來(lái)詳細(xì)談?wù)劇?/div> 2015-06-06
  • 在Python的Flask框架中使用日期和時(shí)間的教程

    在Python的Flask框架中使用日期和時(shí)間的教程

    這篇文章主要介紹了在Python的Flask框架中使用日期和時(shí)間的教程,包括對(duì)各個(gè)時(shí)區(qū)之間轉(zhuǎn)換的一些處理,需要的朋友可以參考下
    2015-04-04
  • Python利用D3Blocks繪制可動(dòng)態(tài)交互的圖表

    Python利用D3Blocks繪制可動(dòng)態(tài)交互的圖表

    今天小編給大家來(lái)介紹一款十分好用的可視化模塊,D3Blocks,不僅可以用來(lái)繪制可動(dòng)態(tài)交互的圖表,并且導(dǎo)出的圖表可以是HTML格式,方便在瀏覽器上面呈現(xiàn),感興趣的可以了解一下
    2023-02-02
  • 10分鐘教你用python動(dòng)畫(huà)演示深度優(yōu)先算法搜尋逃出迷宮的路徑

    10分鐘教你用python動(dòng)畫(huà)演示深度優(yōu)先算法搜尋逃出迷宮的路徑

    這篇文章主要介紹了10分鐘教你用python動(dòng)畫(huà)演示深度優(yōu)先算法搜尋逃出迷宮的路徑,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 使用 Python 創(chuàng)建一個(gè)基于規(guī)則的聊天機(jī)器人

    使用 Python 創(chuàng)建一個(gè)基于規(guī)則的聊天機(jī)器人

    這篇文章主要介紹了使用 Python 創(chuàng)建一個(gè)基于規(guī)則的聊天機(jī)器人,使用 Python 創(chuàng)建一個(gè)簡(jiǎn)單的基于規(guī)則的聊天機(jī)器人 聊天機(jī)器人本身是一種機(jī)器或軟件,它通過(guò)文本或句子模仿人類交互。 簡(jiǎn)而言之,可以使用類似于與人類對(duì)話的軟件進(jìn)行聊天。
    2021-10-10

最新評(píng)論