python类继承与子类实例初始化用法分析
本文实例讲述了python类继承与子类实例初始化用法。分享给大家供大家参考。具体分析如下:
[先贴参考书籍原文(中文英文对照)]
__init__方法介绍:
Ifabaseclasshasan__init__()methodthederivedclass's__init__()methodmustexplicitlycallittoensureproperinitializationofthebaseclasspartoftheinstance;forexample:"BaseClass.__init__(self,[args...])"
Asaspecialcontraintonconstructors,novaluemaybereturned;doingsowillcauseaTypeErrortoberaisedatruntime.
如果其基类也具有__init__(),必须显式地在__init__()调用它,以保证能够适当地初始化它的基类部分;例如:"BaseClass.__init__(self,[args...])"作为构造器的特殊情况,它没有值被返回,如果返回某个值,会在运行时抛出异常TypeError.
1.子类定义了__init__方法时若未显示调用基类__init__方法,python不会帮你调用,解释运行都Ok
classA(): def__init__(self): print'a' classB(A): def__init__(self): print'b' if__name__=='__main__': b=B() >>> b
2.子类未定义__init__方法时,python会自动帮你调用首个基类的__init__方法,注意是首个。即:子类继承自多个基类时,只有第一个基类的__init__方法会被调用到:
classA: def__init__(self): print'a' classB: def__init__(self): print'b' classC(B): def__init__(self): print'c' pass classD1(A,B,C): pass classD2(B,A,C): pass classD3(C,B,A): pass if(__name__=='__main__'): print'd1------->:' d1=D1() print'd2------->:' d2=D2() print'd3------->:' d3=D3() >>> d1------->: a d2------->: b d3------->: c
3)基类未定义__init__方法时,若此时子类显示调用基类__init__方法时,python向上超找基类的基类的__init__方法并调用,实质同2
classA: def__init__(self): print'a' classB: def__init__(self): print'b' classC1(B,A): pass classC2(A,B): pass classD1(C1): def__init__(self): C1.__init__(self) classD2(C2): def__init__(self): C2.__init__(self) if(__name__=='__main__'): print'd1------->:' d1=D1() print'd2------->:' d2=D2() >>> d1------->: b d2------->: a
希望本文所述对大家的Python程序设计有所帮助。