0

これは非常に基本的な OOP の質問かもしれません:

同じ階層にない 2 つのクラスがあります。ただし、両方のクラスには、コード内で同一のメソッドがいくつかあります。これらのメソッドは、クラスの「UI」を実装します。これらのメソッドを mixin に移動し、両方のクラスにその mixin を継承させる予定です。

問題は: これらのメソッドは現在、それらのクラスの属性を参照する必要があります (それらは本質的にクラスの UI であるため): 例: 両方ともself.MyVar()、クラス A とクラス B で異なって定義されている を参照します。

この場合、どうすればミックスインを構築できますか?

4

1 に答える 1

1

mixin はself.MyVar()それを実装していなくても呼び出すことができ、継承オブジェクトの実装が (最初に) 使用されます。

class Mixin(object):
    def talk(self):
        print self.get_message()

class Inheritor(Mixin):
    def get_message(self):
        return "I'm inheriting"

i = Inheritor()
i.talk()
# prints "I'm inheriting"

ちなみに、これはMixin実装されていても機能get_messageします。

を実行するたびself.something()に、Python はsomethingクラスの「メソッド解決順序」で定義された順序で検索します。

print Inheritor.__mro__
(<class '__main__.Inheritor'>, <class '__main__.Mixin'>, <type 'object'>)
于 2013-09-05T19:51:29.757 に答える