多继承,多态

. 多继承
在这里插入图片描述
从图中能够看出,所谓多继承,即子类有多个父类,并且具有它们的特征

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)

猜你喜欢

转载自blog.csdn.net/PG_peng/article/details/84565007