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

python中super().__init__()的用法

 更新時(shí)間:2023年03月28日 16:28:09   作者:BeanInJ  
python里的super().__init__()有什么作用?很多同學(xué)沒(méi)有弄清楚。super()用來(lái)調(diào)用父類(基類)的方法,__init__()是類的構(gòu)造方法,感興趣的小伙伴可以參考閱讀本文

super().__ init__ ()有什么用?

super().__init__() 、 super(B,self).__init__()

1、分別理解super()和 __ init __()

1.1、super()

需要注意的是python2、3的super寫(xiě)法稍有不同。

1.2、__ init __()

__init__() 是python中的構(gòu)造函數(shù),在創(chuàng)建對(duì)象的時(shí)"自動(dòng)調(diào)用"。

定義類時(shí)可以不寫(xiě)init方法,系統(tǒng)會(huì)默認(rèn)創(chuàng)建,
你也可以寫(xiě)一個(gè),讓你的類在創(chuàng)建時(shí)完成一些“動(dòng)作”。

1.3、super(). __ init __()

如果子類B和父類A,都寫(xiě)了init方法,
那么A的init方法就會(huì)被B覆蓋。想調(diào)用A的init方法需要用super去調(diào)用。

當(dāng)然,在B內(nèi)部,除了用super調(diào)用父類的方法,也可以用父類名調(diào)用,例:

class B(A):
    def __init__(self):
        A.__init__(self)
        print("B init")
1.3.1、關(guān)于“覆蓋”的疑問(wèn)

有人可能會(huì)誤解“覆蓋”的意思,認(rèn)為“覆蓋”了就是沒(méi)有,為什么還能通過(guò)super調(diào)用?
覆蓋了并不是沒(méi)有了,A的方法終都還在,但需要在B內(nèi)部用super調(diào)用。

例:
A里寫(xiě)了一個(gè)方法hi(), B繼承自A, B里也寫(xiě)了一個(gè)方法hi()。
B的對(duì)象在外部調(diào)用hi(), 就只能調(diào)用B里面寫(xiě)的這個(gè)hi()。
想通過(guò)B調(diào)用A的hi(),只能在B內(nèi)部用super().hi()調(diào)用。
class A:
    def hi(self):
        print("A hi")

class B(A):
    def hello(self):
        print("B hello")
        
b = B()
b.hi()       # B里沒(méi)有寫(xiě)hi(),這里調(diào)用的是繼承自A的hi()

------------------------------------------------------------------
class A:
    def hi(self):
        print("A hi")

class B(A):
    def hi(self):
        print("B hi")
        
b = B()
b.hi()    # 這里調(diào)用的就是B自己的hi()
------------------------------------------------------------------
class A:
    def hi(self):
        print("A hi")

class B(A):
    def hi(self):
        super().hi()         # 通過(guò)super調(diào)用父類A的hi()
        print("B hi")
        
b = B()
b.hi()    # 這里調(diào)用的就是B里面的hi()

2、super() 在 python2、3中的區(qū)別

Python3.x 和 Python2.x 的一個(gè)區(qū)別: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx :

例:
python3 直接寫(xiě)成 : super().__init__()
python2 必須寫(xiě)成 :super(本類名,self).__init__()

 Python3.x 實(shí)例:

class A:
     def add(self, x):
         y = x+1
         print(y)
class B(A):
    def add(self, x):
        super().add(x)
b = B()
b.add(2)  # 3

Python2.x 實(shí)例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
class A(object):   # Python2.x 記得繼承 object
    def add(self, x):
         y = x+1
         print(y)
class B(A):
    def add(self, x):
        super(B, self).add(x)
b = B()
b.add(2)  # 3

3、關(guān)于繼承順序

最底層:先寫(xiě)一個(gè)父類A

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

第二層:讓 B、C、D 繼承自A

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

class C(A):
    def __init__(self):
        print('C')
        super().__init__()

class D(A):
    def __init__(self):
        print('D')
        super().__init__()

第三層: E、F、G 繼承

class E(B, C):
    def __init__(self):
        print('E')
        super().__init__()

class F(C, D):
    def __init__(self):
        print('F')
        super().__init__()

class G(E, F):
    def __init__(self):
        print('G')
        super().__init__()

看看G的繼承順序

我們發(fā)現(xiàn)G繼承自E, F是并列的,初始化的時(shí)候不會(huì)先把E初始化完畢才初始化F。

4、從多個(gè)實(shí)例中對(duì)比super(python3)

下面是三種不同的繼承、調(diào)用,對(duì)比他們的區(qū)別,搞清楚super().__init__()的用途。

4.1、實(shí)例

子類名稱繼承內(nèi)容
Puple繼承所有
Puple_Init繼承,但覆蓋了init方法
Puple_Super繼承,但覆蓋了init方法,并在init里面添加了super().__init__()

 4.2、運(yùn)行結(jié)果與對(duì)比

4.3、完整代碼

 到此這篇關(guān)于python中super().__init__()的用法的文章就介紹到這了,更多相關(guān)super().__init__()的用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中的字符串判斷

    Python中的字符串判斷

    本文通過(guò)實(shí)例代碼介紹了Python中的字符串判斷,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-10-10
  • PyCharm代碼格式調(diào)整方法

    PyCharm代碼格式調(diào)整方法

    今天小編就為大家分享一篇PyCharm代碼格式調(diào)整方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • python中defaultdict方法的使用詳解

    python中defaultdict方法的使用詳解

    這篇文章主要介紹了python中defaultdict方法的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Python基于tkinter canvas實(shí)現(xiàn)圖片裁剪功能

    Python基于tkinter canvas實(shí)現(xiàn)圖片裁剪功能

    這篇文章主要介紹了Python基于tkinter canvas實(shí)現(xiàn)圖片裁剪功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python利用zhdate模塊實(shí)現(xiàn)農(nóng)歷日期處理

    Python利用zhdate模塊實(shí)現(xiàn)農(nóng)歷日期處理

    zhdate模塊統(tǒng)計(jì)從1900年到2100年的農(nóng)歷月份數(shù)據(jù)代碼,支持農(nóng)歷和公歷之間的轉(zhuǎn)化,并且支持日期差額運(yùn)算。本文將利用這一模塊實(shí)現(xiàn)農(nóng)歷日期的處理,需要的可以參考一下
    2022-03-03
  • 解析PyCharm Python運(yùn)行權(quán)限問(wèn)題

    解析PyCharm Python運(yùn)行權(quán)限問(wèn)題

    這篇文章主要介紹了PyCharm Python運(yùn)行權(quán)限問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • django 通過(guò)URL訪問(wèn)上傳的文件方法

    django 通過(guò)URL訪問(wèn)上傳的文件方法

    今天小編就為大家分享一篇django 通過(guò)URL訪問(wèn)上傳的文件方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • python pandas模塊進(jìn)行數(shù)據(jù)分析

    python pandas模塊進(jìn)行數(shù)據(jù)分析

    Python的Pandas模塊是一個(gè)強(qiáng)大的數(shù)據(jù)處理工具,可以用來(lái)讀取、處理和分析各種數(shù)據(jù),本文主要介紹了python pandas模塊進(jìn)行數(shù)據(jù)分析,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • python 實(shí)現(xiàn)文件的遞歸拷貝實(shí)現(xiàn)代碼

    python 實(shí)現(xiàn)文件的遞歸拷貝實(shí)現(xiàn)代碼

    今天翻電腦時(shí)突然發(fā)現(xiàn)有個(gè)存了很多照片和視頻的文件夾,想起來(lái)是去年換手機(jī)(流行的小5)時(shí)拷出來(lái)的??戳藥讖堈掌掠忠荒荒坏母‖F(xiàn)在腦海,好吧,我是個(gè)感性的人
    2012-08-08
  • Python3的高階函數(shù)map,reduce,filter的示例詳解

    Python3的高階函數(shù)map,reduce,filter的示例詳解

    這篇文章主要介紹了Python3的高階函數(shù)map,reduce,filter的示例代碼,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07

最新評(píng)論