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

python中super().__init__()作用詳解

 更新時間:2023年02月03日 14:55:22   作者:BeanInJ  
super()用來調(diào)用父類(基類)的方法,__init__()是類的構(gòu)造方法,super().__init__()?就是調(diào)用父類的init方法,?同樣可以使用super()去調(diào)用父類的其他方法,這篇文章主要介紹了python中super().__init__(),需要的朋友可以參考下

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

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

python里的super().__init__()有什么作用?很多同學沒有弄清楚。

super()用來調(diào)用父類(基類)的方法,__init__()是類的構(gòu)造方法,
super().__init__() 就是調(diào)用父類的init方法, 同樣可以使用super()去調(diào)用父類的其他方法。

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

1.1、super()

在這里插入圖片描述

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

1.2、__ init __()

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

在這里插入圖片描述

定義類時可以不寫init方法,系統(tǒng)會默認創(chuàng)建,
你也可以寫一個,讓你的類在創(chuàng)建時完成一些“動作”。

1.3、super(). __ init __()

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

在這里插入圖片描述

當然,在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)于“覆蓋”的疑問

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

例:
A里寫了一個方法hi(), B繼承自A, B里也寫了一個方法hi()。
B的對象在外部調(diào)用hi(), 就只能調(diào)用B里面寫的這個hi()。
想通過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里沒有寫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()         # 通過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 的一個區(qū)別: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx :

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

Python3.x 實例:

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 實例:

#!/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)于繼承順序

最底層:先寫一個父類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是并列的,初始化的時候不會先把E初始化完畢才初始化F。

4、從多個實例中對比super(python3)

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

4.1、實例

在這里插入圖片描述

子類名稱繼承內(nèi)容Puple繼承所有Puple_Init繼承,但覆蓋了init方法Puple_Super繼承,但覆蓋了init方法,并在init里面添加了super().__init__()4.2、運行結(jié)果與對比

在這里插入圖片描述

4.3、完整代碼

在這里插入圖片描述

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

相關(guān)文章

  • 詳解Python中string模塊除去Str還剩下什么

    詳解Python中string模塊除去Str還剩下什么

    這篇文章主要介紹了詳解Python中string模塊除去Str還剩下什么,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 卷積神經(jīng)網(wǎng)絡(CNN)基于SqueezeNet的眼疾識別功能

    卷積神經(jīng)網(wǎng)絡(CNN)基于SqueezeNet的眼疾識別功能

    SqueezeNet是一種輕量且高效的CNN模型,它參數(shù)比AlexNet少50倍,但模型性能(accuracy)與AlexNet接近,這篇文章主要介紹了卷積神經(jīng)網(wǎng)絡(CNN)基于SqueezeNet的眼疾識別,需要的朋友可以參考下
    2023-08-08
  • 詳解Python使用simplejson模塊解析JSON的方法

    詳解Python使用simplejson模塊解析JSON的方法

    這篇文章主要介紹了Python使用simplejson模塊解析JSON的方法,實例代碼基于Pyhton2.x版本,文中最后還附了關(guān)于simplejson模塊的一些性能放面的討論,需要的朋友可以參考下
    2016-03-03
  • python篩選出兩個文件中重復行的方法

    python篩選出兩個文件中重復行的方法

    這篇文章主要為大家詳細介紹了python篩選出兩個文件中重復行的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Python常用庫Numpy進行矩陣運算詳解

    Python常用庫Numpy進行矩陣運算詳解

    這篇文章主要介紹了Python常用庫Numpy進行矩陣運算詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • python中星號變量的幾種特殊用法

    python中星號變量的幾種特殊用法

    不知道大家知不知道在Python中,星號除了用于乘法數(shù)值運算和冪運算外,還有一種特殊的用法"在變量前添加單個星號或兩個星號",實現(xiàn)多參數(shù)的傳入或變量的拆解,本文將詳細介紹"星號參數(shù)"的用法。有需要的可以參考借鑒。
    2016-09-09
  • Pandas導入導出excel、csv、txt文件教程

    Pandas導入導出excel、csv、txt文件教程

    Pandas?是一個強大的數(shù)據(jù)分析和處理庫,可以用來讀取和處理多種數(shù)據(jù)格式,本文主要介紹了Pandas導入導出excel、csv、txt文件教程,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • python爬蟲基礎之urllib的使用

    python爬蟲基礎之urllib的使用

    這篇文章主要介紹了python爬蟲基礎之urllib的使用,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Python實現(xiàn)設計模式之單例模式詳解

    Python實現(xiàn)設計模式之單例模式詳解

    這篇文章主要介紹了Python實現(xiàn)設計模式之單例模式詳解,設計模式是指軟件設計問題的推薦方案,設計模式一般是描述如何組織代碼和使用最佳實踐來解決常見的設計問題,需謹記一點:設計模式是高層次的方案,并不關(guān)注具體的實現(xiàn)細節(jié),比如算法和數(shù)據(jù)結(jié)構(gòu),需要的朋友可以參考下
    2023-09-09
  • python的pdb調(diào)試命令的命令整理及實例

    python的pdb調(diào)試命令的命令整理及實例

    這篇文章主要介紹了python的pdb調(diào)試命令的命令整理及實例的相關(guān)資料,需要的朋友可以參考下
    2017-07-07

最新評論