多继承编程思想:
一个对象在不同场景中,可能扮演不同的角色【设计时多态】
class Son:
def xiao_shun(self):
print("百善孝为先")
class Student:
def xue_xi(self):
print("好好学习,天天向上")
class Friend:
def play("self"):
print("吃喝玩乐")
class Person(Son, Student, Friend):
"""人的类型:继承儿子、学生、朋友"""
pass
p = Person()
# 家庭环境
if isinstance(p, Son):
p.xiao_shun() # 百善孝为先
# 学习环境
if isinstance(p, Student):
p.xue_xi() # 好好学习,天天向上
# 朋友
if isinstance(p, Friend):
p.play() # 吃喝玩乐
def xue_tang(person):
# 作为一个学员,在教室要好好学习
if isinstance(person, Student):
person.xue_xi()
xue_tang(p) # 好好学习,天天向上
多继承的问题
问题:如果不同的父类出现了相同名称的属性或者方法
子类会继承谁的属性或者方法?
python3中都是新式类:广度优先,从父类中查询对应的方法,查询到第一个满足的方法之后就直接返回
object
|
A(object)
|
A_1(A) --> A_2(A)
|
Test(A_1, A_2)
python2中的经典类:深度优先
A
|
A --> A_2(A)
|
A_1(A)
|
Test(A_1, A_2)
class A:
def test(self):
print("aaaaaaaaaaaaaaaaa")
class A_1(A):
def test(self):
print("1111111111111111111")
class A_2(A):
def test(self):
print("2222222222222222222")
class Test(A_1, A_2):
pass
t = Test()
t.test() # 1111111111111111111
print(Test.mro()) # [<class '__main__.Test'>, <class '__main__.A_1'>, <class '__main__.A_2'>, <class '__main__.A'>, <class 'object'>]