python中一层装饰器的函数可以带参数吗
答案:2 悬赏:0 手机版
解决时间 2021-02-08 10:17
- 提问者网友:我没有何以琛的痴心不悔
- 2021-02-07 22:30
python中一层装饰器的函数可以带参数吗
最佳答案
- 五星知识达人网友:十鸦
- 2021-02-07 23:37
class User:
def __init__(self,username,is_allowed_login):
self.username = username
self.is_allowed_login = is_allowed_login
u = User("jayolu",False)
aa = lambda u:u.is_allowed_login
#print aa
#print aa(u)
def user_pass_test(is_allowed_login):
def handle_fun(func):
def handle_args(user):
if not is_allowed_login(user):
print "user can't vote,return"
return
else :
print "user can vote"
func(user)
return handle_args
return handle_fun
@user_pass_test(lambda u:u.is_allowed_login)
def vote(u):
print "%s vote is %s"%(u.username,u.is_allowed_login)
vote(u)
def __init__(self,username,is_allowed_login):
self.username = username
self.is_allowed_login = is_allowed_login
u = User("jayolu",False)
aa = lambda u:u.is_allowed_login
#print aa
#print aa(u)
def user_pass_test(is_allowed_login):
def handle_fun(func):
def handle_args(user):
if not is_allowed_login(user):
print "user can't vote,return"
return
else :
print "user can vote"
func(user)
return handle_args
return handle_fun
@user_pass_test(lambda u:u.is_allowed_login)
def vote(u):
print "%s vote is %s"%(u.username,u.is_allowed_login)
vote(u)
全部回答
- 1楼网友:时间的尘埃
- 2021-02-08 01:16
首先十分不推荐这种做法, 会令程序难以维护.
其次, 多个装饰器是按照装饰器的顺序进行执行的.
如果你编写过装饰器, 你就应该知道, 其实装饰器就是把函数的名字传入进去, 在执行函数之前, 进行一些提前的处理.
例如下面这段代码, 自定义的装饰器
def add_schedid(handler_func):
"""
@handler_func: 请求处理函数
"""
@functools.wraps(handler_func)
def wrapper(self, *args, **kwargs):
"""
wrapper
"""
# handler_func就是所装饰的函数,可以在这里做一些真正函数执行前所需的处理,
handler_func(self, *args, **kwargs)
return wrapper
装饰器本身就是一个函数, 将所装饰的函数, 作为一个参数传进来, 然后在执行这个函数之前, 进行一个处理,这就是装饰器. 所以和正常函数执行顺序是一样的..
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯