Мой случай:
class BaseClass:
@staticmethod
def dummy_decorator(fnc):
def wrapper():
print('Im so dummy')
return wrapper
class InheritedClass(BaseClass):
def __init__(self):
pass
def anymethod(self):
print('hello world')
Когда я смотрю на dir()
, я вижу свой staticmethod
>>> c = InheritedClass()
>>> dir(c)
['__doc__', '__init__', '__module__', 'anymethod', 'dummy_decorator']
Кроме того, я могу использовать свой фиктивный оператор как простой staticmethod внутри нового класса , Но когда я пытаюсь использовать его в качестве декоратора - я получаю ошибку
class InheritedClass(BaseClass):
def __init__(self):
pass
@dummy_decorator
def anymethod(self):
print('hello world')
>>> NameError: name 'dummy_decorator' is not defined
Почему это так работает? Я знаю, что если я изменю @dummy_decorator
на @BaseClass.dummy_decorator
- все будет работать, но почему я не могу использовать decorator без ref для родительского класса?