日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中的super用法详解_【Python】【类】super用法详解

發(fā)布時間:2024/4/19 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中的super用法详解_【Python】【类】super用法详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、問題的發(fā)現(xiàn)與提出

在Python類的方法(method)中,要調用父類的某個方法,在Python 2.2以前,通常的寫法如代碼段1:

代碼段1:

class A:

def __init__(self):

print "enter A"

print "leave A"

class B(A):

def __init__(self):

print "enter B"

A.__init__(self)

print "leave B"

>>> b = B()

enter B

enter A

leave A

leave B

即,使用非綁定的類方法(用類名來引用的方法),并在參數(shù)列表中,引入待綁定的對象(self),從而達到調用父類的目的。

這樣做的缺點是,當一個子類的父類發(fā)生變化時(如類B的父類由A變?yōu)镃時),必須遍歷整個類定義,把所有的通過非綁定的方法的類名全部替換過來,例如代碼段2,

代碼段2:

class B(C): # A --> C

def __init__(self):

print "enter B"

C.__init__(self) # A --> C

print "leave B"

如果代碼簡單,這樣的改動或許還可以接受。但如果代碼量龐大,這樣的修改可能是災難性的。

因此,自Python 2.2開始,Python添加了一個關鍵字super,來解決這個問題。下面是Python 2.3的官方文檔說明:

super(type[, object-or-type])

Return the superclass of type. If the second argument is omitted the super object

returned is unbound. If the second argument is an object, isinstance(obj, type)

must be true. If the second argument is a type, issubclass(type2, type) must be

true. super() only works for new-style classes.

A typical use for calling a cooperative superclass method is:

class C(B):

def meth(self, arg):

super(C, self).meth(arg)

New in version 2.2.

從說明來看,可以把類B改寫如代碼段3:

代碼段3:

class A(object): # A must be new-style class

def __init__(self):

print "enter A"

print "leave A"

class B(C): # A --> C

def __init__(self):

print "enter B"

super(B, self).__init__()

print "leave B"

嘗試執(zhí)行上面同樣的代碼,結果一致,但修改的代碼只有一處,把代碼的維護量降到最低,是一個不錯的用法。因此在我們的開發(fā)過程中,super關鍵字被大量使用,而且一直表現(xiàn)良好。

在我們的印象中,對于super(B, self).__init__()是這樣理解的:super(B, self)首先找到B的父類(就是類A),然后把類B的對象self轉換為類A的對象(通過某種方式,一直沒有考究是什么方式,慚愧),然后“被轉換”的類A對象調用自己的__init__函數(shù)。考慮到super中只有指明子類的機制,因此,在多繼承的類定義中,通常我們保留使用類似代碼段1的方法。

有一天某同事設計了一個相對復雜的類體系結構(我們先不要管這個類體系設計得是否合理,僅把這個例子作為一個題目來研究就好),代碼如代碼段4:

代碼段4:

class A(object):

def __init__(self):

print "enter A"

print "leave A"

class B(object):

def __init__(self):

print "enter B"

print "leave B"

class C(A):

def __init__(self):

print "enter C"

super(C, self).__init__()

print "leave C"

class D(A):

def __init__(self):

print "enter D"

super(D, self).__init__()

print "leave D"

class E(B, C):

def __init__(self):

print "enter E"

B.__init__(self)

C.__init__(self)

print "leave E"

class F(E, D):

def __init__(self):

print "enter F"

E.__init__(self)

D.__init__(self)

print "leave F"

>>> f = F()

enter F

enter E

enter B

leave B

enter C

enter D

enter A

leave A

leave D

leave C

leave E

enter D

enter A

leave A

leave D

leave F

明顯地,類A和類D的初始化函數(shù)被重復調用了2次,這并不是我們所期望的結果!我們所期望的結果是最多只有類A的初始化函數(shù)被調用2次——其實這是多繼承的類體系必須面對的問題。我們把代碼段4的類體系畫出來,如下圖:

object

| /

| A

| / |

B C D

/ / |

E |

/ |

F

按我們對super的理解,從圖中可以看出,在調用類C的初始化函數(shù)時,應該是調用類A的初始化函數(shù),但事實上卻調用了類D的初始化函數(shù)。好一個詭異的問題!

詳情請點擊:Python中的super用法詳解_python_腳本之家?www.jb51.net

注意點:

1.__init__是析構函數(shù),也就是類被實例化(生成對象)之后默認加載的內容,常用于初始化類。

2.__init__是函數(shù)只加在一次,且在類運行時首先運行。

3.#通過super初始化父類,__init__()函數(shù)無self,若直接QtWidgets.QWidget.__init__(self),括號里是有self的

總結

以上是生活随笔為你收集整理的python中的super用法详解_【Python】【类】super用法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成年人黄色网址 | 欧美1区| 精品人妻一区二 | 久久成人av| 亚洲精品大全 | 日本大尺度做爰呻吟 | 激情久久久 | 伊人色影院 | 日韩精品综合 | www.夜夜爱| 午夜小福利 | 日本一级一片免费视频 | 欧美性猛交xxx乱久交 | 欧美丰满美乳xxⅹ高潮www | 日韩国产毛片 | 狠狠干青青草 | 国产精品一区二区免费视频 | 国产乱码精品一区二区三区忘忧草 | 香蕉久久夜色精品升级完成 | 性色在线| 亚洲激情欧美激情 | 中日韩午夜理伦电影免费 | 日韩视频在线免费观看 | 97精品国产97久久久久久免费 | 96日本xxxxxⅹxxx70 | 在线播放波多野结衣 | 黄色片在线免费观看 | 在线观看黄色免费视频 | 免费91视频 | 九一精品一区 | 黄色一级片a | 欧美成人综合在线 | 亚洲黄色小视频 | 欧美aa大片 | 日本在线观看 | 亚洲91久久| 这里只有精品在线观看 | 亚洲一级片网站 | www.色悠悠 | 舐丝袜脚视频丨vk | 99久久免费国产精精品 | 国产视频三级 | 中文字幕第2页 | 九九热免费在线视频 | 欧美国产中文字幕 | mdyd—856冲田杏梨在线 | 国产一二三精品 | 国产一级做a爰片久久毛片男 | 操丰满女人 | 长腿校花无力呻吟娇喘的视频 | 国产靠逼网站 | 一级性生活大片 | 日本成人片在线 | 超碰777| 国产精品 欧美 日韩 | jizz高潮 | 百合sm惩罚室羞辱调教 | aaa色| 伊人久久久久久久久久久 | 午夜伦伦电影理论片费看 | 久久久久久久无码 | 91精品专区| 午夜美女视频 | 午夜一二区 | 三级av免费 | av一二三四区 | 欧美日韩在线观看成人 | 国产孕妇孕交大片孕 | 97成人精品 | 夜夜骚av一区二区三区 | 牛牛视频在线观看 | 中文无码熟妇人妻av在线 | 日本大尺度吃奶做爰视频 | 成人自拍网站 | h视频网站在线观看 | 久久r这里只有精品 | 精品国模一区二区三区欧美 | 国产视频黄| 青草久久网 | 精品久久久久久久久久久aⅴ | 体内精69xxxxxx | 国产欧美日韩在线观看 | 中文字幕一区二区人妻在线不卡 | 国产精品一区二区三 | 亚洲精品免费播放 | 亚洲男人精品 | 99国产精品白浆在线观看免费 | 国产欧美一区二区 | 久久精品一二区 | 夜夜爽日日澡人人添 | 欧美国产日本 | 亚洲国产成人精品久久 | 九热精品 | 免费成人在线网站 | 日本网站在线免费观看 | 色香影院 | 在线视频免费观看 | 精品国产av一区二区 | 蜜臀av性久久久久蜜臀av麻豆 |