本文實例講述了python類繼承與子類實例初始化用法。分享給大家供大家參考。具體分析如下:
[ 先貼參考書籍原文(中文英文對照)]
__init__方法介紹:
If a base class has an __init__() method the derived class's __init__() method must explicitly call it to ensure proper initialization of the base class part of the instance; for example: "BaseClass.__init__(self, [args...])"
As a special contraint on constructors, no value may be returned; doing so will cause a TypeError to be raised at runtime.
如果其基類也具有__init__(), 必須顯式地在__init__()調用它, 以保證能夠適當地初始化它的基類部分;例如: "BaseClass.__init__(self, [args...])"作為構造器的特殊情況, 它沒有值被返回, 如果返回某個值, 會在運行時拋出異常TypeError.
1.子類定義了__init__方法時若未顯示調用基類__init__方法,python不會幫你調用,解釋運行都Ok
class A(): def __init__(self):print 'a'class B(A): def __init__(self):print 'b'if __name__=='__main__': b=B()>>> b
2.子類未定義__init__方法時,python會自動幫你調用首個基類的__init__方法,注意是首個。即:子類繼承自多個基類時,只有第一個基類的__init__方法會被調用到:
class A: def __init__(self):print 'a'class B: def __init__(self):print 'b'class C(B): def __init__(self):print 'c' passclass D1(A,B,C): passclass D2(B,A,C): passclass D3(C,B,A): passif(__name__=='__main__'): print 'd1------->:' d1=D1() print 'd2------->:' d2=D2() print 'd3------->:' d3=D3()>>> d1------->:ad2------->:bd3------->:c
3)基類未定義__init__方法時,若此時子類顯示調用基類__init__方法時,python向上超找基類的基類的__init__方法并調用,實質同2
class A: def __init__(self):print 'a'class B: def __init__(self):print 'b'class C1(B,A): passclass C2(A,B): passclass D1(C1): def __init__(self):C1.__init__(self)class D2(C2): def __init__(self):C2.__init__(self)if(__name__=='__main__'): print 'd1------->:' d1=D1() print 'd2------->:' d2=D2()>>> d1------->:bd2------->:a
希望本文所述對大家的Python程序設計有所幫助。
新聞熱點
疑難解答