объясните, пожалуйста, почему если в нижеуказанном коде написать
@FuncDec()
, то всё работает, а если написать
@FuncDec
, то интерпретатор орёт, что в
__init__
подали 2 аргумента вместо одного?
Не понимаю, что меняется, когда я ставлю скобки...
Я знаю, что есть декораторы с параметрами, там наличие этих скобок оправдано, но как они работают, в случае, когда остаются пустыми?
from functools import wraps
class FuncDec:
def __init__(self):
pass
def __call__(self, f):
@wraps(f)
def wrapper(*args, **kwargs):
f(*args, **kwargs)
print('I am working properly')
return wrapper
@FuncDec()
def foo():
print('Hello')
foo()
# Hello
# I am working properly