Python Вопрос. Ошибка типа: __call __ () принимает 2 позиционных аргумента, но 3 были заданы - PullRequest
0 голосов
/ 13 марта 2020

Я рад любой помощи, которую может оказать любой! Я работаю над кодом для основной программы анализа Фурье c, и для вычисления набора коэффициентов, которые я понял из соображений эффективности, я хотел умножить функции, чтобы они могли обеспечить единственную функцию, которая может быть численно интегрирована. Я получил некоторую помощь, и теперь у меня есть «работающий» класс, который должен помочь мне в этом. Ниже приведен код для класса 'operable' над кодом для моей программы:


class operable:
    def __init__(self, f):
        self.f = f
    def __call__(self, x):
        return self.f(x)

def op_to_function_op(op):
    def function_op(self, operand):
        def f(x):
            return op(self(x), operand(x))
        return operable(f)
    return function_op

for name, op in [(name, getattr(operator, name)) for name in dir(operator) if "__" in name]:
    try:
        op(1,2)
    except TypeError:
        pass
    else:
        setattr(operable, name, op_to_function_op(op)) 

Теперь я вызываю работоспособную функцию из этого вызова функции здесь, в шестой строке.

def findFourierCoefficients(function, T, kmax):
    coefficientsA = [] #will have size kmax
    coefficientsB = []
    for i in range(0, kmax):
        #find the coefficient a_k
        integrandA = integrandForAK(function, i) #HERE IS THE FUNCTION CALL
        integrationA = simpson(integrandA, 0, T, nValue)
        coefficientA = (2/T) * integrationA
        coefficientsA.append(coefficientA) 
    return coefficientsA

Я посмотрел онлайн и обнаружил, что мне нужно предоставить третий параметр для моей функции, и я сделал это ниже с параметром 'self'.

@operable
def integrandForAK(self, fun, k):
    def specialCosineFunction(x):
        return np.cos(k * omega * x)
    functionToIntegrate = fun * specialCosineFunction
    #functionToIntegrate = getFunctionProduct(fun, specialCosineFunction)
    return functionToIntegrate

Я все еще Получив эту ошибку, он принимает только два позиционных аргумента, когда три даны - но я сделал еще один аргумент в своей функции, поэтому я не знаю, почему он не распознает его. Еще раз спасибо за любую помощь, которую кто-либо может оказать, я довольно плохо знаком с этим уровнем кодирования - в частности, python новее для меня. Всего наилучшего!

...