您的位置:首页 > 编程语言 > Python开发

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

2017-12-17 11:03 274 查看
一、多重继承

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

四、总结图示

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: