【Python】类的多重继承 、深度优先、广度优先

一、多重继承

1、经典类 vs 新式类

Python 2.x中默认都是经典类,只有显式继承了object才是新式类
Python 3.x中默认都是新式类,不必显式的继承object

2、多重继承

python中一个类可以同时继承多个类

class 类名(父类1,父类2,...)  
        类体  

二、深度优先

1、经典类采用深度优先搜索

class P1:   
     def foo(self):             
         print 'p1-foo'   
   
class P2 :   
     def foo(self):   
         print 'p2-foo'   
  
     def bar(self):   
         print 'p2-bar'   
   
class C1 (P1,P2):   
     pass    
   
class C2 (P1,P2):   
     def bar(self):   
         print 'C2-bar'     
   
class D(C1,C2):   
     pass   

d = D()  
d.foo() # 输出 p1-foo   
d.bar() # 输出 p2-bar 

2、说明:

实例d调用foo()时,搜索顺序是 D => C1 => P1

实例d调用bar()时,搜索顺序是 D => C1 => P1 => P2

经典类的搜索方式:从左到右,深度优先

三、广度优先

1、新式类采用广度优先搜索

class P1(object):   
     def foo(self):             
         print 'p1-foo'   
   
class P2(object):  
     def foo(self):   
         print 'p2-foo'   
  
     def bar(self):   
         print 'p2-bar'   
   
class C1 (P1,P2):   
     pass    
   
class C2 (P1,P2):   
     def bar(self):   
         print 'C2-bar'     
   
class D(C1,C2):   
     pass   

d=D()   
d.foo() # 输出 p1-foo   
d.bar() # 输出 c2-bar

2、说明

实例d调用foo()时,搜索顺序是 D => C1 => C2 => P1
实例d调用bar()时,搜索顺序是 D => C1 => C2

四、总结图示


猜你喜欢

转载自blog.csdn.net/qq_30214939/article/details/78823852
今日推荐