python方法解析顺序和钻石继承

时间:2012-09-06 09:44:53

标签: python

这是我在python代码中的示例模型

class BasicActivity:
    def run(self):
        print "basic run"

    def jump(self):
        print "basic jump"

class ChickenStyleActivity(BasicActivity):
    def run(self):
        print "run like chicken"

class BunnyStyleActivity(BasicActivity):
    def jump(self):
        print "jump like bunny"

class ExtraordinaryActivity(ChickenStyleActivity,BunnyStyleActivity):
    pass

d = ExtraordinaryActivity()
d.run()
d.jump()

我期待在一个班级中同时拥有鸡肉和兔子风格,但令我惊讶的是,它是鸡肉运行但基本跳跃。 我开始阅读有关方法解析顺序的内容,现在我可以看到,在多重继承中更改类的顺序会带来相反的效果。

问题是 - 如何在一个班级中同时拥有Chicken和Bunny风格?

更一般地说:当方法重写发挥作用时,如何正确地继承几个具有公共基类的类?

1 个答案:

答案 0 :(得分:4)

我认为你使用的是Python 2.x,而不是Python 3.x。

因此,BasicActivity需要继承object

class BasicActivity(object):
    pass

Alex Martelli在此描述: Method Resolution Order (MRO) in new style Python classes

在Python 3中,所有类都继承自object