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

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

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

子類里訪問父類的同名屬性,而又不想直接引用父類的名字,因為說不定什么時候會去修改它,所以數(shù)據(jù)還是只保留一份的好。其實呢,還有更好的理由不去直接引用父類的名字,參見 。

這時候就該 super() 登場啦——

復制代碼 代碼如下:

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

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

B().m()


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

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

需要提到自己的名字。這個名字也是動態(tài)查找的,在這種情況下替換第三方庫中的類會出問題。

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

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

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

復制代碼 代碼如下:

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()


會得到:
復制代碼 代碼如下:

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

不過,PyPy 并不支持這個 __class__ 名字。

相關(guān)文章

  • python模塊導入的細節(jié)詳解

    python模塊導入的細節(jié)詳解

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

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

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

    以SQLite和PySqlite為例來學習Python DB API

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論