python中的多继承及多继承的问题

本文探讨了多继承编程思想,通过一个具体例子展示了如何在一个对象中实现多种角色的切换,包括儿子、学生和朋友的身份,并解释了多继承中同名属性或方法的解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多继承编程思想
一个对象在不同场景中,可能扮演不同的角色【设计时多态】

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'>]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值