Изменение работы метода класса внутри метакласса Python
Мне необходимо изменить метод класса с помощью метакласса. Например, мне дается класс, в котором есть какой то метод div
class C(metaclass=custom, n=4):
def div(self, a, b):
return a / b
Моя задача - возвести результат в степень, переданную параметром в классе С. То есть, при вызове C().div(8,2) результат должен быть 16
Мой код:
class custom(type):
n = 3
def __new__(metacls, future_name, future_parents, namespace, **kwds):
if 'n' in kwds:
custom.n = kwds['n']
for k in namespace:
if type(namespace[k]) == types.FunctionType and k[0] != "_":
namespace[k] = lambda *x: (namespace[k](*x)**custom.n
return super().__new__(metacls, future_name, future_parents, namespace)
Однако использование лямбда-функции ведет к зацикливанию программы.
Как это исправить? Есть ли другие способы работы с методами класса через метакласс?