python 多重继承
python中的多重继承,多个父类中出现同名方法,子类在调用的时候,会出现深度优先还是广度优先的问题
但是这要看Python的类是新式类还是经典类
python中的新式类和经典类:
python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧类。
在python2.7中默认建的都是经典类
有两种方法来建立新式类:
1,把 __metaclass__ = type语句放在类模块代码的最前面
2, 自己建的类都从内建类object直接或者间接地继承。
经典类:
1 class P1(): 2 3 def foo(self): 4 print "P1 foo" 5 6 7 class P2(): 8 9 def foo(self): 10 print "P2 foo" 11 12 def bar(self): 13 print "P2 bar" 14 15 16 class C1(P1, P2): 17 pass 18 19 20 class C2(P1, P2): 21 22 def bar(self): 23 print "C2 bar" 24 25 26 class D1(C1, C2): 27 pass 28 d1 = D1() 29 d1.foo() #P1 foo 30 d1.bar() #P2 bar 31 32 class D2(C2, C1): 33 pass 34 d2 = D2() 35 d2.foo() #P1 foo 36 d2.bar() #C2 bar
新式类:
1 class P1(object): 2 3 def foo(self): 4 print "P1 foo" 5 6 7 class P2(): 8 9 def foo(self): 10 print "P2 foo" 11 12 def bar(self): 13 print "P2 bar" 14 15 16 class C1(P1, P2): 17 pass 18 19 20 class C2(P1, P2): 21 22 def bar(self): 23 print "C2 bar" 24 25 26 class D1(C1, C2): 27 pass 28 d1 = D1() 29 d1.foo() #P1 foo 30 d1.bar() #C2 bar 31 32 class D2(C2, C1): 33 pass 34 d2 = D2() 35 d2.foo() #P1 foo 36 d2.bar() #C2 bar