LoginSignup
0
1

More than 3 years have passed since last update.

【Python】(自分用メモ) メタクラスとメタプログラミング

Last updated at Posted at 2020-03-29

クラス (or クラス宣言) は第一級オブジェクト

参考:

クラスを宣言するということは、type クラスのインスタンスを作成していることと等価。

 class C: ... ≡ C = type('C', ...)

クラス生成のカスタマイズ

参考:

この、type インスタンス生成をカスタマイズするのが metaclass 指定。メタクラス Mtype のサブクラスとして宣言し、 __new__ メソッドをオーバーライドすることにより、あるクラス宣言時のクラス生成をカスタマイズできる:

class C(metaclass=M): ...

すべてのクラス生成時に強制的に M を適用することはできないと推測している [要調査]。

インスタンス生成のカスタマイズ

参考:

インスタンス生成のカスタマイズはクラスの __new__ および __init__ を定義 (オーバーライド) して行う。
特に、__new__ をカスタマイズすることにより、生成が意図されたクラス (c = C(...)C) 以外のクラスインスタンスを生成して返す事が可能になる。これは例えばファクトリクラスの実装に使える。
一方、御存知の通り、__init__ は生成されたインスタンスの初期化 (プロパティの設定など) に使用される。

未調査: __prepare__

今度調べる。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1