鉴于函数作为参数传递给装饰器,是否可以通过正在装饰的方法的参数获取对象实例的引用?例如,下面的method1正在装饰,我想打印对象实例的名称.从我最初的研究看起来我可能需要使用mixin来跟踪类实例并搜索/过滤正确的对象,但这看起来有点沉重; 鉴于该方法通过self引用其对象.可以使用相同的引用来打印装饰范围的实例名称吗?
谢谢
def customdecorator(f):
print f.self.method2(a,b, params) // where owner would be the reference to t (self)
class Test(object):
def __init__(self, name):
self.name = name
@customdecorator
def method1(self):
return 1
def method2(self, a,b):
#do something
t = Test()
Run Code Online (Sandbox Code Playgroud)
import functools
def nameprinting(f):
@functools.wraps(f)
def wrapper(self, *args, **kwargs):
print self.name
return f(self, *args, **kwargs)
return wrapper
Run Code Online (Sandbox Code Playgroud)
当调用一个装饰器时,它应该对作为参数给出的函数应用一些转换,从而创建一个新函数.当该函数被调用,它有一个self一起工作.在这种情况下,返回的函数打印self的名称,然后委托给f.
(functools.wraps是一个帮助者,它将f文档字符串和其他一些内容复制到wrapper函数中.)
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |