Python中super().__init__()測試以及理解

python裡的super().init()有什麼用?

對於python裡的super().__init__()有什麼作用,很多同學沒有弄清楚。

直白的說super().__init__(),就是繼承父類的init方法,同樣可以使用super()點 其他方法名,去繼承其他方法。

Python super().__init__()測試

 測試一、我們嘗試下面代碼,沒有super(A, self).__init__()時調用A的父類Root的屬性和方法(方法裡不對Root數據進行二次操作)

class Root(object):
    def __init__(self):
        self.x= '這是屬性'

    def fun(self):
    	#print(self.x)
        print('這是方法')
        
class A(Root):
    def __init__(self):
        print('實例化時執行')

test = A()		#實例化類
test.fun()	#調用方法
test.x		#調用屬性

下面是結果:

Traceback (most recent call last):

實例化時執行

這是方法

  File “/hom/PycharmProjects/untitled/super.py”, line 17, in <module>

    test.x  # 調用屬性

AttributeError: ‘A’ object has no attribute ‘x’

可以看到此時父類的方法繼承成功,可以使用,但是父類的屬性卻未繼承,並不能用

測試二、我們嘗試下面代碼,沒有super(A,self).__init__()時調用A的父類Root的屬性和方法(方法裡對Root數據進行二次操作)

class Root(object):
    def __init__(self):
        self.x= '這是屬性'

    def fun(self):
    	print(self.x)
        print('這是方法')
        
class A(Root):
    def __init__(self):
        print('實例化時執行')

test = A()		#實例化類
test.fun()	#調用方法
test.x		#調用屬性

結果如下

Traceback (most recent call last):

  File “/home/PycharmProjects/untitled/super.py”, line 16, in <module>

    test.fun()  # 調用方法

  File “/home/PycharmProjects/untitled/super.py”, line 6, in fun

    print(self.x)

AttributeError: ‘A’ object has no attribute ‘x’

可以看到此時報錯和測試一相似,果然,還是不能用父類的屬性

測試三、我們嘗試下面代碼,加入super(A, self).__init__()時調用A的父類Root的屬性和方法(方法裡對Root數據進行二次操作)

class Root(object):
    def __init__(self):
        self.x = '這是屬性'

    def fun(self):
        print(self.x)
        print('這是方法')


class A(Root):
    def __init__(self):
        super(A,self).__init__()
        print('實例化時執行')


test = A()  # 實例化類
test.fun()  # 調用方法
test.x  # 調用屬性

結果輸出如下

實例化時執行

這是屬性

這是方法

此時A已經成功繼承瞭父類的屬性,所以super().__init__()的作用也就顯而易見瞭,就是執行父類的構造函數,使得我們能夠調用父類的屬性。

上面是單繼承情況,我們也會遇到多繼承情況,用法類似,但是相比另一種Root.__init__(self),在繼承時會跳過重復繼承,節省瞭資源。

還有很多關於super的用法可以參考

super的使用

super() 在 python2、3中的區別

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

python3直接寫成 super().方法名(參數)

python2必須寫成 super(父類,self).方法名(參數)

例:

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

總結

到此這篇關於Python中super().__init__()測試以及理解的文章就介紹到這瞭,更多相關Python super().__init__()測試內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: