Эта проблема вообще не является декоратором. Эта проблема заключается в том, что вы используете func1 и ваш декоратор в качестве статических методов, не удаляя аргумент self. Если вы удалите аргументы self, это будет работать нормально.
Без статического метода декоратора
class Test:
def add_two(func=None):
def wrapper_add_two(*args, **kwargs):
return func(*args, **kwargs) + 2
return wrapper_add_two
@add_two
def func1(b):
return b
print(Test.func1(10)) #12
С декоратором статического метода
К сожалению, использование их таким образом сохраняет их как несвязанные статические методы, и вам нужно связать их , чтобы это работало должным образом.
class Test:
@staticmethod
def add_two(func):
def wrapper_add_two(*args, **kwargs):
return func.__func__(*args, **kwargs) + 2
return wrapper_add_two
@add_two.__func__
@staticmethod
def func1(b):
return b
print(Test.func1(10)) #12
Запуск с декоратором staticmethod и без привязки функции дает вам
TypeError: объект «staticmethod» не может быть вызван