Изменение работы метода класса внутри метакласса 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)

Однако использование лямбда-функции ведет к зацикливанию программы.

Как это исправить? Есть ли другие способы работы с методами класса через метакласс?


Ответы (0 шт):