[英]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.