【发布时间】:2010-11-10 22:01:35
【问题描述】:
目前,我正在这样做:
class Spam(object):
decorated = None
@classmethod
def decorate(cls, funct):
if cls.decorated is None:
cls.decorated = []
cls.decorated.append(funct)
return funct
class Eggs(Spam):
pass
@Eggs.decorate
def foo():
print "spam and eggs"
print Eggs.decorated # [<function foo at 0x...>]
print Spam.decorated # None
我需要能够在子类中执行此操作,如图所示。问题是我似乎无法弄清楚如何使 decorated 字段不在实例之间共享。现在我有一个骇人听闻的解决方案,最初将其设置为None,然后在装饰函数时检查它,但这只能以一种方式工作。换句话说,如果我将Eggs 子类化,然后用Eggs.decorate 函数装饰某些东西,它会影响所有子类。
我想我的问题是:是否有可能有在基类和子类之间不共享的可变类字段?
【问题讨论】:
-
只是出于好奇:为什么需要跟踪哪些函数已被修饰?
-
好问题。我实际上没有,但我设计了这个场景作为这个问题的一个例子,因为这是一个简单的原因,人们需要能够访问这个类。
标签: python inheritance class decorator