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