【发布时间】:2012-06-23 06:17:53
【问题描述】:
我想在创建类期间自动运行任何派生类的基类中定义的类方法。例如:
class Base(object):
@classmethod
def runme():
print "I am being run"
def __metclass__(cls,parents,attributes):
clsObj = type(cls,parents,attributes)
clsObj.runme()
return clsObj
class Derived(Base):
pass:
这里发生的是,当 Base 被创建时,''runme()'' 将被触发。但是在创建 Derived 时没有任何反应。
问题是:如何在创建 Derived 时让 ''runme()'' 也触发。
这是我迄今为止的想法:如果我将Derived 的metaclass 显式设置为Base,它将起作用。但我不希望这种情况发生。我基本上希望 Derived 使用 Base 的元类,而无需我显式设置它。
【问题讨论】:
-
你为什么要在类中这样定义
__metaclass__?它应该用于将元类设置为外部定义的类。 -
@BrenBarn:但是为什么不能像我一样使用它。据我所知, metaclass 属性是指向类对象还是函数对象都无关紧要。但这确实很重要,我认为你是对的。我想知道为什么?如果可以,请提供一些简单的代码示例。
标签: python metaprogramming metaclass