房屋装修主任未召集

时间:2019-03-25 13:22:10

标签: python

考虑这个装饰器:

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装饰器,则函数和装饰器均不会被调用。

1 个答案:

答案 0 :(得分:1)

看起来@foo.setter必须是最外面的装饰器:

@foo.setter 
@non_null
def foo(self, argument):
    print("Setting")
    self._a = argument

我在文档中找不到关于它的参考,但是检查类的内容可以清楚地表明,如果不是最外层的属性装饰器,则只会得到一个简单的方法而不是属性。