2012-08-24 95 views
5

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

+2

创建类或创建实例吗?因为两者都可以完成,但答案不同。 –

+1

你可以为此使用元类。看看例子[这个问题](http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python)。 – BrenBarn

+6

另外:请不要编制'__special_methods__'。这是为Python语言保留的。如果您希望它是私人的,请使用'_single_underscore_prefix'。 – delnan

回答

10

你可以用metaclassclass 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()" 
+2

我至少从问题的文本中补充说,很难说为什么'__new__'或'__init__'不能做到这一点。 –