メタクラス
Pythonの組み込み(ビルトイン)クラス type はメタクラスである。次に示す単純なPythonのクラスについて説明する。
このコードを実行した時、Car は type のインスタンスになっている。上記の Car クラスのソースコードには __init__ メソッドが Car のインスタンスが生成されるたびに呼ばれるといった細々としたことは記述されていない。メタクラスが用意されていない言語ではこのような振る舞いは言語仕様で定義されており、変更することは不可能である。Pythonではメタクラス type がこれらの動作を決定しており、type の代わりに違うメタクラスを使用することでこれらの振る舞いを変更することが可能である。
上に示した例は4つの属性 make と model、year、color の辺りが冗長である。メタクラスを使えば、この冗長さを取り除くことが可能である。Pythonではメタクラスは type のサブクラスとして定義するのが最も簡単である。
このメタクラスはインスタンスの生成を上書きしているだけで、他の機能はまだ type が処理している。
さて、このメタクラスを用いて Car クラスを書き直すことが可能である。Python 2ではクラス定義中で __metaclass__ にこのメタクラスを代入すればよい(Python 3では代わりに metaclass=M と名前付き引数として与える)。
これで、Car のインスタンスを次のように生成できる。