将类方法传递给fsolve

时间:2017-03-26 15:34:35

标签: python python-3.x scipy

我有以下代码:

import scipy.optimize
class demo(object):
  def get_square(self, var):
    return var ** 2 - 4
new = demo()
scipy.optimize.fsolve(new.get_square(), 1)

我收到以下错误:

TypeError: get_square() missing 1 required positional argument: 'var'

但是get_square()应该总是self并且self不需要传递。问题是什么?

1 个答案:

答案 0 :(得分:3)

fsolve进行任何更改之前,您实际上正在调用函数;由于调用没有参数,这将提高预期的TypeError

您可以将通话()移至new.get_square

scipy.optimize.fsolve(new.get_square, 1)

或者,由于您实际上甚至没有在self中使用get_square,请将其设为@staticmethod

class demo(object):
  @staticmethod
  def get_square(var):
    return var ** 2 - 4

new = demo()
scipy.optimize.fsolve(new.get_square, 1)

两个小笔记:

  • 将CapWords用于班级名称,即demo -> Demo
  • 如果您不想在Python 2/3之间移植,则无需继承object