メタクラス(エキpy)
#エキスパートPythonプログラミング_改訂3版 5.2.4
メタクラスとは他の型(クラス)を定義する型(クラス)
インスタンスはクラスのインスタンスで、クラスはtypeのインスタンス(図5-1)
すべてのクラス定義の基本型は組み込みのtypeクラス (Kindle の位置No.3793-3794)
type()の呼び出しで<class 'int'>と返るのも関係している?
https://docs.python.org/ja/3/library/stdtypes.html#bltin-type-objects
新規のメタクラスはtypeのサブクラス
このメタクラスのインスタンスがクラス
(メタクラスのインスタンスの)クラスのインスタンスがインスタンス(図5-2)
typeの引数説明はPythonのメタクラスと同じ
メタクラスを作るときに定義するメソッド
__new__
「クラスオブジェクトを生成する責任を持」つ
__new__(mcs, name, bases, namespace)
第1引数はメタクラスオブジェクト
__prepare__
__init__
__new__()の生成後に追加でクラスオブジェクトの初期化を実行します (Kindle の位置No.3835)
__init__(cls, name, bases, namespace, **kwargs)
第1引数はメタクラスオブジェクトではなく、生成済みのクラスオブジェクト
メタクラスの__init__()はすべてのサブクラスで呼び出される (Kindle の位置No.3840)
__call__
図の矢印はクラス図の矢印と同じ?
is subclass ofとis instance of