在创建Python类时调用类方法

Sim*_*mon 8 python initializer class-method

我想在类创建时自动运行一些可以调用其他类方法的代码.我没有在类声明本身中找到这样做的方法,并最终创建一个@classmethod被调用__clsinit__并在类声明后立即从定义范围调用它.是否有一个我可以定义的方法,以便在创建类对象后自动调用它?

eca*_*mur 15

您可以使用元类类装饰器来完成此操作.

类装饰器(自2.6起)可能更容易理解:

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

@call_clsinit
class MyClass:
    @classmethod
    def _clsinit(cls):
        print "MyClass._clsinit()"
Run Code Online (Sandbox Code Playgroud)

元类更强大; 他们可以调用的代码,然后修改类的成分,其创建之前以及之后(也,它们可以被继承):

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()"
Run Code Online (Sandbox Code Playgroud)

  • 我要补充说,至少从问题的文本中,很难说为什么`__new__`或`__init__`不能解决问题. (2认同)