Effective Python 項目35の理解

■要点
メタクラスは、class文本体の実行直後に動作する。

■メタクラス
メタクラスは、以下のように定義する。

class MetaClass(type): # typeのサブクラスとして定義する。
    def __new__(meta, name, bases, class_dict):
        '''
        meta : メタクラス(MetaClass)
        name : クラス名文字列('hogehoge')
        bases: 親クラス('hogehoge'オブジェクトの親クラス)のタプル
               Pythonは多重継承できるため、複数の親クラスが存在する場合がある。
        class_dict: クラス属性の辞書
        '''
        cls = type.__new__(meta, name, bases, class_dict)
        return cls # 本来生成するべきオブジェクトを返す。

■メモ
・class_dictのキーはすべて文字列(str)オブジェクトである。
・メタクラスを持つクラスAから派生クラスBを作るとき、以下の順序で実行される。
1. クラスAの定義
2. メタクラスの__new__メソッドの実行
3. クラスBの定義
4. メタクラスの__new__メソッドの実行

Pythonプログラミング物語 © 2016 Frontier Theme