Python 将参数传递给要修饰的类方法的修饰器
我试图在flask中定义一个装饰器,它最终将装饰传递该类实例参数的类方法。下面是我真正想做的一个例子Python 将参数传递给要修饰的类方法的修饰器,python,flask,decorator,Python,Flask,Decorator,我试图在flask中定义一个装饰器,它最终将装饰传递该类实例参数的类方法。下面是我真正想做的一个例子 from functools import wraps def user_permission(myname): def decorator(f): @wraps(f) def decorated(*args,**argws): if myname == 'My Name': return f(*ar
from functools import wraps
def user_permission(myname):
def decorator(f):
@wraps(f)
def decorated(*args,**argws):
if myname == 'My Name':
return f(*args,**argws)
else:
return "Not Permitted"
return decorated
return decorator
我的经理类定义为:
class Manager(flask.views.MethodView):
def __init__(self,name):
self.name = name
@user_permission(self.my_name)
def post(self):
return "Response"
def get(self):
return "Response"
我试图做的是将类变量传递给装饰器。是的,“self”在那一点上没有定义,但“@decorator.user\u permission(self.my\u name)实际上是我正在尝试的,因为我的问题还没有解决
我无法从中找到解决方案。
有人知道这些东西吗?
self
只是一个论点。你不需要装修厂
def user_permission(f):
@wraps(f)
def decorated(self, *args, **kw):
if self.myname == 'My Name':
return f(self, *args, **kw)
else:
return "Not Permitted"
return decorated
正如您所说,
self
在这一点上没有定义。这永远不会起作用,因为定义类时会执行decorator,而调用实例方法时会希望运行一些东西
不过我觉得你把这件事搞得太复杂了self
被传递给方法本身。因此,没有理由尝试将其作为decorator的参数,因为decorator可以访问方法参数。这将简单得多:
from functools import wraps
def user_permission():
@wraps(f)
def decorated(self, *args, **kwargs):
if self.myname == 'My Name':
return f(self, *args, **kwargs)
else:
return "Not Permitted"
return decorated
哦,是的!谢谢我真的忘了那件事。