Pythonのクラスのインタフェース

Wikipediaによると、インタフェースとは、「ものごとの境界となる部分と、その境界でのプロトコルを指す」らしい。
クラスのインタフェースとは、簡単に言ってしまえば、クライアントに公開している機能を呼び出す際の記述方法であると思うのだが、もっと適当に言えば、クラスのpublicなメソッドのシグネチャである(変数やメソッドの返値は無視)。


Pythonでは、文法としてインタフェースというもの用意されてない。RubyのようなMixinもない。
つまり、例えば、C++のような型あり言語でのインタフェースは、Pythonでは、あるメソッドが定義されているという前提を課すことで表現する。Pythonの言い方だと、あるメソッドを属性として持つことを前提とするということである。いわゆる、Duck Typingである。


結局、静的言語でのインタフェースのメリットの1つは、クラスが、あるメソッドが定義されているかどうかを、コンパイル時に検出できるということであり、Pythonなどの動的言語では、実行時になって初めて気づく。
しかし、呼び出し階層が複雑に絡み合っている場合、呼び出し元のインスタンスオブジェクトを探し当てるのが困難になりそうである。
この部分をどう回避すべきなのかは、私自身まだ勉強不足のため不明である。これは、意識しておこう。