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

 

posted @ 2015-08-12 13:37  ivywenyuan  阅读(174)  评论(0编辑  收藏  举报