【问题标题】:Calling a class method upon creation of Python classes在创建 Python 类时调用类方法
【发布时间】:2012-08-24 19:13:40
【问题描述】:

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

【问题讨论】:

  • 类创建还是实例创建?因为两者都可以,但答案因人而异。
  • 您可以为此使用元类。参见例如this question
  • 旁白:请不要编造__special_methods__。这是为 Python 语言保留的。如果您希望它是私有的,请使用 _single_underscore_prefix

标签: python class-method initializer


【解决方案1】:

您可以使用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()"

【讨论】:

  • 我想至少从问题的文本中补充一点,很难说为什么 __new____init__ 不这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 2010-11-19
  • 2011-03-02
  • 1970-01-01
相关资源
最近更新 更多