プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

mixinとは

Pythonなどのコードを見ているとよく見かける「mixin」。

今までは雰囲気でさらりと流してましたが今回、調べてみました。


mixinとは

主に多重継承が可能な言語で使われる継承の使い方です。

継承とは本来、親クラスとその子クラスの間に特別な階層関係を発生させる機能です。

しかしmixinではコードの再利用のための手段として継承を使います。mixinクラスで実装した機能は子クラスにも具備されますが2つのクラスの間にis-a関係が成立するとは限りません。mixinクラスは「親」というより便利機能を具備した「ユーティリティ」という扱いです。いくつものmixinクラスを継承させれば複数の機能を持つ子クラスを簡単に作成できます。

多重継承ではインスタンス変数が重複すると面倒なことになります。これを避けるため、多重継承が前提のmixinクラスにはインスタンス変数を持たせないことが一般的です。


主な使い方

主な使い方を挙げます。

  • 複数のクラスにまたがる横断的な機能をmixinクラスで実装して各クラスにmixinする
  • あるクラスが持ちうる様々な役割・機能をmixinクラスで実装して、mixinクラスの組み合わせによって様々なフレーバーのクラスを作る
  • mixinクラスをTemplate MethodパターンのAbstractクラスにして、固有の処理はmixinされたクラスで実装する

Python以外の言語におけるmixinの実装

多重継承ができないJavaでもInterfaceを利用してmixinを実現できます。

同様に多重継承ができないRubyでは「モジュール」という固有機能を利用してmixinを多用します。