繁体   English   中英

如何使用装饰器检查 class 属性初始化?

[英]How to check for class attribute initialization with a decorator?

考虑以下代码。

def check(data):
    def decorator(function):
        def wrapper(*args, **kwargs):
            if data not in ["toto", "tata"]:
                raise ValueError("Wrong argument")
            result = function(*args, **kwargs)
            return result
        return wrapper
    return decorator


class Foo:
    
    @check
    def __init__(data):
        self.data = data
         
         
Foo(data="t")

我想装饰 class 的__init__ function,但我得到一个例外:

Traceback (most recent call last):
  File "<string>", line 19, in <module>
TypeError: decorator() got an unexpected keyword argument 'data'

您混淆了哪个 function 收到了什么。 check是接收您正在装饰的 function的装饰器,而不是data wrapper是将接收data的 function。 您不需要那里的第三个 function。 所以:

def check(function):
    def wrapper(self, data):
        if data not in ["toto", "tata"]:
            raise ValueError("Wrong argument")

        return function(self, data)

    return wrapper

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM