python 子類調用父類的構造函數


  當子類繼承父類后,需要調用父類的方法和屬性時,需要調用父類的初始化函數。

class A(object):
    def __init__(self):
        self.nameaa = 'aa'
    def funca(self):
        print('function a %s' % self.nameaa)
        
class B(A):
    def __init__(self):
        self.namebb = 'bb'
   def funcb(self): print('function b %s' % self.namebb) b = B() print(b.namebb) b.funcb() print(b.nameaa) b.funca()

  在子類中重寫了構造函數,但新的構造函數沒有初始化父類,當沒有初始化父類的構造函數時,就會報錯。

  (1)調用超類的構造方法

class A(object):
    def __init__(self):
        self.nameaa = 'aa'
    def funca(self):
        print('function a %s' % self.nameaa)
        
class B(A):
    def __init__(self):
        self.namebb = 'bb' A.__init__(self)       #添加
    def funcb(self):
        print('function b %s' % self.namebb)
        
b = B()
print(b.namebb)
b.funcb()
print(b.nameaa)
b.funca()

  (2)使用super函數

class A(object):
    def __init__(self):
        self.nameaa = 'aa'
    def funca(self):
        print('function a %s' % self.nameaa)
        
class B(A):
    def __init__(self):
        self.namebb = 'bb' super(B,self).__init__() def funcb(self):
        print('function b %s' % self.namebb)
        
b = B()
print(b.namebb)
b.funcb()
print(b.nameaa)
b.funca()

  super函數返回一個super對象,解析過程自動查找所有的父類和父類的父類,當前類和對象可以作為super函數的參數使用,調用函數返回的方法是超類的方法。使用super函數如果子類繼承多個父類只許一次繼承,使用一次super函數即可。

  如果沒有重寫子類的構造函數,是可以直接使用父類的屬性和方法的。

class A(object):
    def __init__(self):
        self.nameaa = 'aa'
    def funca(self):
        print('function a %s' % self.nameaa)
        
class C(A):
    pass
c = C()
c.funca()
print(c.nameaa)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM