考虑这个装饰器:
from functools import wraps
def non_null(func):
@wraps(func)
def wrapper(*args, **kwargs):
print("Test")
assert all(not a is None for a in args)
return func(*args, *kwargs)
return wrapper
围绕类函数的属性设置器:
@non_null
@foo.setter
def foo(self, argument):
print("Setting")
self._a = argument
如果使用non_null装饰器,则函数和装饰器均不会被调用。
答案 0 :(得分:1)
看起来@foo.setter
必须是最外面的装饰器:
@foo.setter
@non_null
def foo(self, argument):
print("Setting")
self._a = argument
我在文档中找不到关于它的参考,但是检查类的内容可以清楚地表明,如果不是最外层的属性装饰器,则只会得到一个简单的方法而不是属性。