Python でインターフェイスを持たせたい。
Python は、動的言語なので Java で言うところのインターフェイスに相当するものはありません。ただ、共通のメソッドを持たせたい場合は2つほど方法があります。
例えば、こんなシチュエーションだとして...
class A: pass class B: pass # こいつを追加したい。 class Interface: def f(self): return None def g(self): return None
方法1 一旦分解して、クラス変数に関数を代入
has-a による継承
class A: f = f g = g class B: f = f g = g
こいつの利点は is-a による継承はよくないらしいので避け
クラスの「継承」より「合成」がよい理由とは?
has-a による継承を実現している。
composition over inheritance
方法2 Interface クラスを継承する
is-a による継承
class Interface: def f(self): return None class A(Interface): pass class B(Interface): pass
もし A が Interface のみでなく、他にも C というクラスを継承しようすると多重継承になってしまう。方法1は、そう言った事態も避けることができる。
# 多重継承 class A(Interface, C): pass