我对 Python 装饰器有疑问。
class decorator(object):
def __init__(self, function):
self.function = function
def __call__(self, *args, **kwargs):
print('sth to log: %s : %s' % (self.function.__name__, args))
return self.function(*args, **kwargs)
@decorator
def sum_test(a, b):
print('sum: %s' % (a+b))
@decorator
class Class_test(object):
def __init__(self):
pass
def sum_func(self, a, b):
print('class sum: %s' % (a+b))
return a+b
if __name__ == '__main__':
sum_test(3, 4)
func = Class_test()
var1 = func.sum_func(1, 4)
print(var1)
输出:
sth to log: sum_test : (3, 4)
sum: 7
sth to log: Class_test : ()
class sum: 5
5
装饰器按我想要的功能工作sum_test
。我可以记录该函数sum_test
与变量3
和4
.
我对装饰课程有疑问。我可以记录该类对象Class_test
已创建,但我没有使用该函数sum_func
的信息。
为什么在类对象上__call__()
运行时没有触发装饰器,而sum_func
直接在函数上使用时会触发sum_test
?