5
我想在创建类时自动运行一些可以调用其他类方法的代码。我从类声明本身没有找到这样做的方法,最终创建一个名为__clsinit__
的@classmethod
,并在类声明后立即从定义范围中调用它。有没有我可以定义的方法,以便在类对象创建后自动调用它?创建Python类时调用类方法
我想在创建类时自动运行一些可以调用其他类方法的代码。我从类声明本身没有找到这样做的方法,最终创建一个名为__clsinit__
的@classmethod
,并在类声明后立即从定义范围中调用它。有没有我可以定义的方法,以便在类对象创建后自动调用它?创建Python类时调用类方法
你可以用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()"
我至少从问题的文本中补充说,很难说为什么'__new__'或'__init__'不能做到这一点。 –
创建类或创建实例吗?因为两者都可以完成,但答案不同。 –
你可以为此使用元类。看看例子[这个问题](http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python)。 – BrenBarn
另外:请不要编制'__special_methods__'。这是为Python语言保留的。如果您希望它是私人的,请使用'_single_underscore_prefix'。 – delnan