Python日本語マニュアル - The Japanese manual of Python
ホーム




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

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

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

  • クラスが生成される前にクラス辞書を変更する
  • 他のクラスのインスタンスを返す - 本質的にはファクトリ関数の役割を 果たす

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

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

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

  • dict['__metaclass__'] があればそれを使います。

  • それ以外の場合で、最低でも一つ基底クラスを持っているなら、 基底クラスのメタクラス (__class__ 属性を探し、なければ 基底クラスの型) を使います。

  • それ以外の場合で、__metaclass__ という名前のグローバル変数 があれば、それをつかいます。

  • それ以外の場合には、旧形式のメタクラス (types.ClassType) を使います。

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

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




  • このサイトでは、Pythonの日本語マニュアルを参照できます。検索も可能です。
  • このサイトはリンクフリーです。
【 関連サイト 】
Linux関連日本語ドキュメントLinux日本語manFreeBSD日本語manPHP日本語マニュアルPython日本語マニュアルRuby日本語マニュアルApache 2.0 日本語マニュアルApache 2.2 日本語マニュアルTomcat 3.2関連日本語ドキュメントPostgreSQL日本語マニュアルServlet API 2.3 および JSP API 1.2の日本語ドキュメントAntの日本語ドキュメントJK2の日本語ドキュメントFreeBSD日本語ハンドブック
Documents Library

Powered by pinkdragon.net.