5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Pythonのお勉強 Part11

345 :デフォルトの名無しさん:2006/08/15(火) 06:42:11
メタクラスおもろいな。できることをまとめると↓こんな感じ?

クラス A のメタクラスを M とする。

1) A を定義する直前に所定のコードを実行できる。

この目的には M.__new__() をオーバーライドすればよい。

クラス名を変えたり基底クラスを増やしたりメソッドを置換(ラップ)したりできる。

比較:
A.__new__ においてインスタンスの生成方法を変更できるのと同様に、
M.__new__ において A の生成方法(すなわち A の定義)を変更できる。

2) A を定義した直後に所定のコードを実行できる。

この目的には M.__init__() をオーバーライドすればよい。

比較:
A.__init__ において A (および A の下位クラス) のインスタンスをいじれるのと同様に、
M.__init__ において A (および A の下位クラス) をいじれる。

3) クラスメソッド(第1引数がインスタンスではなくクラスであるメソッド)を定義できる。

この目的には M に適当な名前のメソッド(例えば foo)を定義すればよい。
A.foo() として呼び出すと M.foo(A) が実行される。

比較:A のインスタンスを a とすると a.bar() と A.bar(a) は同義。

*** 要約 ***
クラスがインスタンスの生成方法や振舞いを規定するのと同様に、
メタクラスはクラスの生成方法や振舞いを規定する。

236 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)