Вы можете написать простую функцию вне класса:
def add_val(f):
def wrapper(cls, _x):
return f(cls, _x) + 10
return wrapper
class A:
@add_val
def f(self, x):
return 2*x
print(A().f(20))
Выход:
50
Редактировать: вы можете использовать functools.wraps
с classmethod
в Python3. Обернутая функция f
вернет x*2
, а декоратор g
добавит 10
к возвращенному результату переданной ей функции. Однако, чтобы сохранить исходную функциональность f
, вы можете использовать атрибут __wrapped__
:
import functools
def g(f):
@functools.wraps(f)
def wrapper(cls, _x):
return f(cls, _x)+10
return wrapper
class A:
@classmethod
@g
def f(cls, x):
return x*2
f_1 = functools.partial(A.f.__wrapped__, A)
print(A.f(4))
print(f_1(4))
Выход:
18
8