在下面的代码中,我使用装饰器对类变量执行更改
class MyClass():
def __init__(self):
self.vars = [1,2]
self.log = None
def _mydecorator(function):
def logger(self):
self.log = "BLA"
function(self)
return logger
@_mydecorator
def addone(self):
print("Inside Class: %s" % map(lambda x: x+1, self.vars))
return map(lambda x: x+1, self.vars)
if __name__ == '__main__':
myclass = MyClass()
print myclass.addone()
此脚本返回:
Inside Class: [2,3]
None
为什么值没有传递给调用者?
如果我没有装饰我得到的addone
函数:
Inside Class: [2,3]
[2,3]
这个装饰者改变了什么?
答案 0 :(得分:7)
您需要更改装饰器以返回调用未修饰方法的结果:
def _mydecorator(function):
def logger(self):
self.log = "BLA"
return function(self)
return logger
答案 1 :(得分:5)
您的logger
函数不会返回函数调用的结果。变化:
function(self)
要:
return function(self)