经典类:
#!/usr/bin/env python #*-* coding:utf-8 *-* class A(): def __init__(self): print 'my name is GF' def test(self): print 'this is ====A=====' class B(A): def __init__(self): print 'my name is BFather' class C(A): def __init__(self): print 'my name is Cfather' def test(self): print 'this is ======C======' class D(B,C): def __init__(self): print 'my name is D' t1 =D() t1.test() 执行效果: my name is D this is ======A====== #继承关系,先找B,如果B没有则找A.(深度优先)
新生类:
#!/usr/bin/env python #*-* coding:utf-8 *-* class A(object): def __init__(self): print 'my name is GF' def test(self): print 'this is ====A=====' class B(A): def __init__(self): print 'my name is BFather' class C(A): def __init__(self): print 'my name is Cfather' def test(self): print 'this is ======C======' class D(B,C): def __init__(self): print 'my name is D' t1 =D() t1.test() 执行结果 my name is D this is ======C====== #继承关系,先找B,如果B没有则找C(广度优先) 当然,class D(B,C) 这里是先执行B,在执行C的。
小结:经典类深度优先,新生类广度优先。
class A(object): def __init__(self): print 'my name is GF' def test(self): print 'this is ====A=====' class B(A): def __init__(self): print 'my name is BFather' class C(A): def __init__(self): print 'my name is Cfather' def test(self): print 'this is ======C======' class D(B,C): def __init__(self): print 'my name is D' super(D,self).__init__() t1 =D() t1.test() 这里执行父类的构造函数,可以使用super方法,这也是新生类的特点。 如果使用经典类的话,那么调用父类的构造函数或者是方法,只能使用父类.方法(self)的方法
小结:新生类是支持super方式调用父类的方法。