The syntax of your decorator is:
@hook("test")
def testHook():
translates to:
def testHook():
testHook = hook("test")(testHook)
therefore, only one argument is given. You need to rebuild your code to create a class decorator as the return value hook().
The following steps will work:
def hook(hookname):
class HookDecorator(object):
def __init__(self, f):
if hookname not in hooks:
hooks[hookname] = []
hooks[hook].append({"module": f.__module__, "func": f})
self.f = f
def __call__(self, *args):
return self.f(*args)
return HookDecorator
__call__ self.f, f, . , hooks -.
; . :
from functools import wraps
def hook(hookname):
def decorator(f):
if hookname not in hooks:
hooks[hookname] = []
hooks[hookname].append({"module": f.__module__, "func": f})
@wraps(f)
def wrapper(*args):
return f(*args)
return wrapper
return decorator