这个装饰器如何在python中工作

时间:2015-10-09 02:05:11

标签: python python-decorators

我的代码中有其他人写的这个装饰器,我无法得到它

def mydecorator(a, b):
        def f1(func):
            def new_func(obj):
                try:
                    f= func(obj) 
                except Exception as e:
                    pass
                else:
                    if f is None:
                        pass
                    else:
                        f = f, a, b

                return f
            return new_func
        return f1

这适用于这样的功能

@mydecorator('test1', 'test2')
def getdata():
   pass

我的想法是装饰器将函数名称作为参数但是在这里

我无法从func来自obj来到哪里

1 个答案:

答案 0 :(得分:4)

这 -

@mydecorator('test1', 'test2')
def getdata():
   pass

类似于(没有创建decofunc名称) -

decofunc = mydecorator('test1', 'test2')
@decofunc
def getdata():
   pass

由于mydecorator()返回f1,它接受​​函数作为参数。

然后它将getdata函数作为参数。并返回new_func,名称getdata将替换为此new_func,因此每当您致电getdata()时,它都会调用此new_func函数,该函数会在内部调用您的getdata()原始{{1}}功能。