Consider the following code.
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")
I would like to decorate the __init__ function of a class, but I get an exception :
Traceback (most recent call last):
File "<string>", line 19, in <module>
TypeError: decorator() got an unexpected keyword argument 'data'
Any help would be appreciated :)
CodePudding user response:
You're mixing up which function receives what. check is the decorator which receives the function you're decorating, not data. wrapper is the function which will receive data. You don't need the third function in there. So:
def check(function):
def wrapper(self, data):
if data not in ["toto", "tata"]:
raise ValueError("Wrong argument")
return function(self, data)
return wrapper
