python 继承父类之后的super方法_python继承和在派生类的父类中使用super()

首先,我不得不为没有更好的头衔而道歉.如果您找到更合适的产品,请随意更改.

基本上,我被Python的多重继承行为所困扰.在我的previous SO question中,我被指示阅读Python’s C3 MRO.这真的有助于我更好地理解Python中的多重继承.就在我以为自己掌握了它的时候,我碰到了下面的场景,我似乎无法理解.

class UltimateBase(object):

def check(self):

print 'base check'

class AMixin1(UltimateBase):

def check(self):

print 'check A'

class BMixin1(UltimateBase):

def check(self):

print 'check B'

class CMixin1(UltimateBase):

def check(self):

print 'check C'

class AMixin2(UltimateBase):

def check(self):

print 'check A'

return super(AMixin2, self).check()

class BMixin2(UltimateBase):

def check(self):

print 'check B'

return super(BMixin2, self).check()

class CMixin2(UltimateBase):

def check(self):

print 'check C'

return super(CMixin2, self).check()

class MyView1(AMixin1, BMixin1, CMixin1):

pass

class MyView2(AMixin2, BMixin2, CMixin2):

pass

class MyView3(AMixin1, BMixin2, CMixin2):

pass

class MyView4(AMixin2, BMixin1, CMixin2):

pass

class MyView5(AMixin2, BMixin2, CMixin1):

pass

class MyView6(AMixin1, BMixin1, CMixin2):

pass

class MyView7(AMixin1, BMixin2, CMixin1):

pass

class MyView8(AMixin2, BMixin1, CMixin1):

pass

myview1 = MyView1()

myview2 = MyView2()

myview3 = MyView3()

myview4 = MyView4()

myview5 = MyView5()

myview6 = MyView6()

myview7 = MyView7()

myview8 = MyView8()

myview1.check()

print '------------------------'

myview2.check()

print '------------------------'

myview3.check()

print '------------------------'

myview4.check()

print '------------------------'

myview5.check()

print '------------------------'

myview6.check()

print '------------------------'

myview7.check()

print '------------------------'

myview8.check()

print '------------------------'

输出:

check A

------------------------

check A

check B

check C

base check

------------------------

check A

------------------------

check A

check B

------------------------

check A

check B

check C

------------------------

check A

------------------------

check A

------------------------

check A

check B

------------------------

我可以根据观察输出来追踪一个模式,但这让我不理解这个结果背后的基本原理.

我有一些问题,例如,为什么myview2.check()会返回

check A

check B

check C

base check

check A

base check

在我看来,我错过了关于多重继承的关键部分.请为我填补空白.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值