Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python方法解析顺序和菱形继承_Python - Fatal编程技术网

python方法解析顺序和菱形继承

python方法解析顺序和菱形继承,python,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 BunnyStyleAct

下面是我的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()
我本来希望在一节课上既有鸡又有兔,但出乎意料的是,对我来说,这是小鸡跑,但却是基本的跳跃。 我开始阅读有关方法解析顺序的书籍,现在我可以看到在多重继承中改变类的顺序会带来相反的效果

问题是——我怎么能在一节课上既吃鸡肉又吃兔子呢


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

我认为您使用的是Python2.x,而不是Python3.x

因此,基本活动需要从对象继承:

Alex Martelli在这里描述:


在Python3中,所有类都继承自object

我认为您使用的是Python2.x,而不是Python3.x

因此,基本活动需要从对象继承:

Alex Martelli在这里描述:


在Python 3中,所有类都从对象继承

为了完整性:旧式类不从对象继承的类使用深度优先的从左到右方法解析顺序。不,我使用的是python2.7,但您的解决方案有效-我将方法保留在基类中,刚刚修改它以从对象继承,现在我在我的顶级类中有了这两个重写版本。谢谢我不是指python2.0,我是指2.x。所以在Python3中,我的示例可以在不继承object的情况下工作?没错。基本上你不应该在2.7中使用旧式类,因为它们是不向前兼容的。为了完整性起见:旧式类不从对象继承的类使用深度优先的从左到右的方法解析顺序。不,我使用的是python2.7,但你的解决方案有效-我将方法保留在基类中,刚刚修改它以从对象继承,现在我在我的顶级类中有了这两个重写版本。谢谢我不是指python2.0,我是指2.x。所以在Python3中,我的示例可以在不继承object的情况下工作?没错。基本上,您不应该在2.7中使用旧式类,因为它们是不向前兼容的。
class BasicActivity(object):
    pass