我想在类创建时自动运行一些可以调用其他类方法的代码。我没有在类声明本身中找到这样做的方法,最终创建一个名为@classmethod
的{{1}},并在类声明后立即从定义范围调用它。是否有一个我可以定义的方法,以便在创建类对象后自动调用它?
答案 0 :(得分:14)
您可以使用metaclass或class decorator。
执行此操作类装饰器(自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()"