python方法解析顺序和菱形继承
下面是我的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
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