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有异曲同工之妙,都是为了提倡功能组合来简化继承结构。

你可能感兴趣的:(python,python,多继承,多实现,java,同名方法)