12

クラスの作成時に、他のクラスメソッドを呼び出すことができるコードを自動的に実行したいと思います。クラス宣言自体の中からそうする方法を見つけられず、クラス宣言の直後に呼び出されたものを作成し、定義スコープから呼び出すことになります@classmethod__clsinit__クラスオブジェクトの作成後に自動的に呼び出されるように定義できるメソッドはありますか?

4

1 に答える 1

18

これは、メタクラスまたはクラスデコレータを使用して行うことができます。

クラスデコレータ(2.6以降)はおそらく理解しやすいでしょう:

def call_clsinit(cls):
    cls._clsinit()
    return cls

@call_clsinit
class MyClass:
    @classmethod
    def _clsinit(cls):
        print "MyClass._clsinit()"

メタクラスはより強力です。コードを呼び出して、クラスの構成要素を作成前と作成後に変更できます(また、継承することもできます)。

def call_clsinit(*args, **kwargs):
    cls = type(*args, **kwargs)
    cls._clsinit()
    return cls;

class MyClass(object):
    __metaclass__ = call_clsinit

    @classmethod
    def _clsinit(cls):
        print "MyClass._clsinit()"
于 2012-08-24T19:17:01.773 に答える