我想要一个装饰器将装饰函数添加到列表中,如下所示:
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 和装饰器。
您无法访问self
来自装饰器,因为装饰器在定义函数时运行,并且当时没有 的实例My_Class
yet.
最好将函数列表作为类属性而不是实例属性。然后你可以将此列表作为参数传递给装饰器:
def addToList(funcList):
'''Decorator that adds the function to a given list'''
def actual_decorator(f):
funcList.append(f)
return f
return actual_decorator
class MyClass(object):
funcList = []
@addToList(funcList)
def some_function(self, name):
print 'Hello,', name
现在您可以访问MyClass.funcList
获取修饰函数的列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)