python多继承父类存在同名方法和Mixin

废话不多说,还是坚持代码驱动,先看代码,引出问题

一,python多继承 父类存在同名方法

class land(object):
    def me(self):
        print('land')

    def run(self):
        print('run...')

class sky(object):
    def me(self):
        print('fly')

    def fly(self):
        print('fly...')


class plane(land, sky):
    pass

p = plane()

p.run()
p.fly()
p.me()

Output:
run...
fly...
land

可以看到,land类和sky类都有 me方法,然而plane最后却选择了land的方法,这说明多继承时,如果父类方法同名,优先级从左往右。

那么想要调用sky的me方法该怎么办?

class plane(land, sky):
    def me(self):
        super().me()                #land的me
        super(plane,self).me()       #land的me
        super(land,self).me()        #sky的me

p = plane()

p.me()

Output:
land
land
fly

修改的plane就是上面这样,所以默认调用的从左往右第一个,但实际上可以调用任意一个。

二,java单继承多实现

java是单继承的,所以不会出现多继承上述问题。有的人会说不是有多实现么?那么多实现的时候,接口有同名方法怎么处理?

搞清楚里面的关系:

接口的实现是交给了实现类的,那么不存在实现类调用接口方法的问题,而是接口调用继承了自己类的具体实现。

三,MixIn

继承一般有一条主线,当主线满足不了需求,需要添加那些不在主线上的功能的时候,就需要继承别的类,这个时候可以把这种类设计成Mixin——也就是仅仅提供新功能组合出更强大的功能,而不改变原有的继承主线结构。

Mixin只是一个名字而已,python里也确实有以Mixin结尾的这种设计。其实细细品味下来,Mixin和java的Interface有异曲同工之妙,都是为了提倡功能组合来简化继承结构。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值