1

これは、私の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()

1つのクラスでチキンとバニーの両方のスタイルがあると思っていましたが、驚いたことに、チキンランで基本的なジャンプでした。メソッド解決の順序について読み始めたところ、多重継承でクラスの順序を変更すると逆の効果が生じることがわかりました。

問題は、1 つのクラスで Chicken と Bunny の両方のスタイルを使用するにはどうすればよいかということです。

より一般的には、メソッドのオーバーライドが有効になったときに、共通の基本クラスを持ついくつかのクラスを適切に継承する方法は?

4

1 に答える 1

4

Python 3.x ではなく、Python 2.x を使用していると思います。

したがって、BasicActivity は次から継承する必要がありますobject

class BasicActivity(object):
    pass

Alex Martelli がここで説明しています: Method Resolution Order (MRO) in new style Python classes

Python 3 では、すべてのクラスがobject

于 2012-09-06T09:47:50.670 に答える