永发信息网

python中一层装饰器的函数可以带参数吗

答案:2  悬赏:0  手机版
解决时间 2021-02-08 10:17
python中一层装饰器的函数可以带参数吗
最佳答案
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 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 装饰器本身就是一个函数, 将所装饰的函数, 作为一个参数传进来, 然后在执行这个函数之前, 进行一个处理,这就是装饰器. 所以和正常函数执行顺序是一样的..
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
喝过酒吃过肉能喝咖啡吗?
梦幻西游如何得到一个好胚子
请问在杭州工资税前3500一个人够花吗
豪门家居旗舰店地址在什么地方,我要处理点事
一首英文老歌,男的唱的歌词i know you can sh
旺业通讯这个地址在什么地方,我要处理点事
求of mice and men 的中文版~
新房用菠萝消除异味时,是整个放呢还是需切开
达洛克家居地址在什么地方,想过去办事
广州·龙树门地址在哪,我要去那里办事
美宜佳NO.1085地址在什么地方,想过去办事
“对物质进行分类和鉴别”是学习和实践化学的
华为g7手机装内存卡后照片不能储存
在榆林想自驾游去青海湖,去过的朋友推荐一下
男孩取名 翊宸 翊晨 翊辰 哪个好
推荐资讯
胁痛易怒、惊风抽搐宜首选的药物是A.归脾经的
内蒙古民族大学文科专业排名,最好的文科专业
为什么说WiMax在国内受到打压,就是因为WiMax
京沪高速公路在临沂市不经过下列哪一个县(区
鲅鱼圈未来一个月的天气7月20-8月20号
中国人民财产保险股份有限公司株洲市新城支公
百度云 猫女狐女系列 或时间静止系列 跪求 免
节省机油打一字
我下了PSP的寄生前夜1,双盘合一的,玩到换盘
千味源精品粮油连锁店我想知道这个在什么地方
新海咖啡(笠泽路店)地址在哪,我要去那里办事
光大眼镜地址在什么地方,我要处理点事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?