python 子類繼承父類的__init__方法


父類A

class A(object):
    def __init__(self, name):
        self.name=name
print "name:", self.name
def getName(self): return 'A ' + self.name

子類不重寫__init__,實例化子類時,會自動調用父類定義的__init__

class B(A):
    def getName(self):
        return 'B '+self.name
 
if __name__=='__main__':
    b=B('hello')
    print b.getName()

執行

$python lei2.py 
name: hello
B hello

但重寫了__init__時,實例化子類,就不會調用父類已經定義的__init__

class A(object):
    def __init__(self, name):
        self.name=name
        print "name:", self.name
    def getName(self):
        return 'A ' + self.name

class B(A):
    def __init__(self, name):
        print "hi"
        self.name =  name
    def getName(self):
        return 'B '+self.name

if __name__=='__main__':
    b=B('hello')
    print b.getName()

執行

$python lei2.py 
hi
B hello

為了能使用或擴展父類的行為,最好顯示調用父類的__init__方法

class A(object):
    def __init__(self, name):
        self.name=name
        print "name:", self.name
    def getName(self):
        return 'A ' + self.name

class B(A):
    def __init__(self, name):
        super(B, self).__init__(name)
        print "hi"
        self.name =  name
    def getName(self):
        return 'B '+self.name

if __name__=='__main__':
    b=B('hello')
    print b.getName()

執行

$python lei2.py
name: hello
hi
B hello

 


免責聲明!

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



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