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:类型错误:方法接收的参数多于给定的参数的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis Map<>接收参数导致类型转换错误

Python 3:当子构造函数的参数多于父构造函数时,从继承的方法返回新的子类实例

传递给 Illuminate\Database\Eloquent\Model::__construct() 的参数 1 必须是数组类型,给定对象,

回显shell转义参数[重复]

函数传参,参数类型

JavaScript数组(Array)类型之迭代方法