【发布时间】:2011-12-04 14:10:06
【问题描述】:
我想要一个装饰器,它将装饰函数添加到列表中,如下所示:
class My_Class(object):
def __init__(self):
self.list=[]
@decorator
def my_function(self)
print 'Hi'
我希望将 my_function 添加到 self.list,但我无法编写这个装饰器。如果我尝试在 My_Class 中编写它,那么我将不得不使用@self.decorator,并且 self 不存在,因为我们在任何函数之外。如果我尝试将它写出 My_Class,那么我将无法从 my_function 中检索 self。
我知道存在非常相似的问题,但它们过于复杂,我只是在学习 python 和装饰器。
【问题讨论】:
-
顺便说一句,使用
list作为变量名不是很好(因为这会遮蔽内置list类)。 -
你想要一个被修饰的函数列表(每个函数出现一次),还是一个函数何时被调用的列表(每个函数可能出现多次)?
-
@ovgolovin 这个
list名字是对的,我上面写的是伪代码。 @interjay 我希望列表是特定于实例的,并且每个修饰函数一次。 -
@CGGJE:如果列表包含每个修饰函数一次,那么它肯定对于所有实例都是相同的。那么,为什么您希望它是特定于实例的呢?
-
如果你想让每个函数在列表中出现一次,你可以使用
set而不是list。但是set不允许您跟踪订单。