3.4.3 クラス生成をカスタマイズする

デフォルトでは、新スタイルクラスは type() を使って構築 されます。クラス定義が別の名前空間に読み込まれ、 クラス名は type(name, bases, dict) の結果に結合されます。

クラス定義が読み込まれる際、__metaclass__ が定義されていれば、 type() の代わりに __metaclass__ が指している 呼び出し可能オブジェクトが呼び出されます。 これによって、

といった、クラス生成のプロセスを監視したり置き換えたりする クラスや関数を書くことができます。

__metaclass__
この変数は namebases、および dict を引数として 取るような任意の呼び出し可能オブジェクトにできます。 クラス生成の際、組み込みの type() の代わりに、指定された 呼び出しオブジェクトが呼び出されます。 バージョン 2.2 で 新たに追加 された仕様です。

以下に優先順で並んだ規則によって、適切なメタクラスが決定されます:

メタクラスは限りない潜在的利用価値を持っています。これまで試されて きたアイデアには、ログ記録、インタフェースのチェック、 自動デリゲーション、自動プロパティ生成、プロキシ、フレームワーク、 そして自動リソースロック/同期といったものがあります。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。