Python:类型错误:方法接收的参数多于给定的参数
Posted
技术标签:
【中文标题】Python:类型错误:方法接收的参数多于给定的参数【英文标题】:Python: Type error: method receives more arguments than the ones given 【发布时间】:2019-04-26 12:33:16 【问题描述】:我创建了这个类来确定分布的归一化函数。 这是具有相对 main 的类:
class Normaliser(object):
def funcN(f, xIni, xFin, yIni, yFin):
return sym.integrate(f, (x, xIni,
xFin), (y, yIni, yFin))
def main():
f = (1+sym.cos(x)**2)*sym.exp(-y/t)
g = (3*sym.sin(x)**2)*sym.exp(-y/t)
xIni = 0.
xFin = 2*pi
yIni = 0.
yFin = 10.
tau1 = 1.
tau2 = 2.
*funcN1 = Normaliser().funcN(f, xIni,
xFin, yIni, yFin)*
*funcN2 = Normaliser().funcN(g, xIni,
xFin, yIni, yFin)*
当我运行测试器时,强调行中出现以下错误:
TypeError: funcN() takes exactly 5
arguments (6 given)
考虑到方法中没有 self ,我真的不明白这个错误是从哪里引起的。如果有人对可能的原因以及可能的解决方案有任何想法,我将不胜感激。提前致谢!
【问题讨论】:
【参考方案1】:作为Normaliser
类的常规成员函数,funcN
被传递给正在调用它的Normaliser
对象(规范名称为self
)作为第一个参数。此隐式参数添加在任何显式参数之前。
由于您将函数定义为接受五个参数并传递五个显式参数,因此使用六个参数调用该函数 - 一个隐式,五个显式。
如果funcN
不使用Normaliser
的任何(实例或类)成员变量,它可以在任何类之外定义或用@staticmethod
装饰器标记以避免添加隐式self
。
【讨论】:
好的,非常感谢!我现在明白了很多!然而现在又出现了一个疑问,你认为只使用静态方法创建一个类是可以的还是渎职? 如果他们有一些共同点(例如,他们都在同一个数据结构上工作或者是一个过程中的步骤),我认为没有任何问题,特别是如果只有几个方法。我认为使用模块进行这种分组更为传统。调用静态方法和模块级函数是相同的。time
模块就是这样一个模块的例子(虽然它是用 C 实现的,所以它不是一个完美的例子)。以上是关于Python:类型错误:方法接收的参数多于给定的参数的主要内容,如果未能解决你的问题,请参考以下文章
Python 3:当子构造函数的参数多于父构造函数时,从继承的方法返回新的子类实例
传递给 Illuminate\Database\Eloquent\Model::__construct() 的参数 1 必须是数组类型,给定对象,