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

Python学习笔记8-类的继承 、深度优先、广度优先

2016-01-05 16:31 609 查看
Python 类声明

语法: 

class  类名:
类体
例:

#--encoding:utf-8--
#
class AddressBookEntity:
myVersion=0.1
def __init__(self,name,phone):
self.name=name
self.phone=phone
def updatePhone(self,newPhone):
self.phone=newPhone
print 'update user\' phone :'+newPhone

tom=AddressBookEntity('Tom','158375599668')
jack=AddressBookEntity('Jack','18975662244')

print tom
print tom.name,tom.phone
print jack
print jack.name,jack.phone
tom.updatePhone('15000000000')
print tom.name,tom.phone


Python 类的继承

在ptyhon中类一个类是可以同时继承多个类,语法:

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

Python类继承之深度优先

python 支持多继承,但对与经典类和新式类来说,多继承查找的顺序是不一样的。

经典类:

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


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

实例d调用bar()时,搜索顺序是 D => C1 => P1 => P2
换句话说,经典类的搜索方式是按照“从左至右,深度优先”的方式去查找属性。d先查找自身是否有foo方法,没有则查找最近的父类C1里是否有该方法,如果没有则继续向上查找,直到在P1中找到该方法,查找结束。

Python类继承之广度优先

新式类:

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


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

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

可以看出,新式类的搜索方式是采用“广度优先”的方式去查找属性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: