. 多继承
从图中能够看出,所谓多继承,即子类有多个父类,并且具有它们的特征
Python中多继承的格式如下:
#定义一个父类
class A:
def printA(self):
print(’—-A—-’)
#定义一个父类
class B:
def printB(self):
print(’—-B—-’)
#定义一个子类,继承自A、B
class C(A,B):
def printC(self):
print(’—-C—-’)
obj_C = C()
obj_C.printA()
obj_C.printB()
运行结果:
—-A—-
—-B—-
说明
python中是可以多继承的
父类中的方法、属性,子类会继承
注意点
想一想:
如果在上面的多继承例子中,如果父类A和父类B中,有一个同名的方法,那么通过子类去调用的时候,调用哪个?
#coding=utf-8
class base(object):
def test(self):
print(’—-base test—-’)
class A(base):
def test(self):
print(’—-A test—-’)
#定义一个父类
class B(base):
def test(self):
print(’—-B test—-’)
#定义一个子类,继承自A、B
class C(A,B):
pass
obj_C = C()
obj_C.test()
print(C.
mro
) #可以查看C类的对象搜索方法时的先后顺序
多态
多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。
所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态
Python伪代码实现Java或C#的多态
class F1(object):
def show(self):
print ‘F1.show’
class S1(F1):
def show(self):
print ‘S1.show’
class S2(F1):
def show(self):
print ‘S2.show’
#由于在Java或C#中定义函数参数时,必须指定参数的类型
#为了让Func函数既可以执行S1对象的show方法,又可以执行S2对象的show方法,所以,定义了一个S1和S2类的父类
#而实际传入的参数是:S1对象和S2对象
def Func(F1 obj):
“”“Func函数需要接收一个F1类型或者F1子类的类型”””
print obj.show()
s1_obj = S1()
Func(s1_obj) # 在Func函数中传入S1类的对象 s1_obj,执行 S1 的show方法,结果:S1.show
s2_obj = S2()
Func(s2_obj) # 在Func函数中传入Ss类的对象 ss_obj,执行 Ss 的show方法,结果:S2.show
Python “鸭子类型”
class F1(object):
def show(self):
print ‘F1.show’
class S1(F1):
def show(self):
print 'S1.show'
class S2(F1):
def show(self):
print 'S2.show'
def Func(obj):
print obj.show()
s1_obj = S1()
Func(s1_obj)
s2_obj = S2()
Func(s2_obj)