面向对象python:使用方法(self,*optargs)调用类并接收错误;最多接受2个参数(给定4个)“;

面向对象python:使用方法(self,*optargs)调用类并接收错误;最多接受2个参数(给定4个)“;,python,Python,我正在使用一段python代码,该代码如下所示: #script.py from module import moduleobject class classname(moduleobject): def __init__(self): pass def lookupFunction(self, **optargs): data =self.moduleobjectfunction(param1, param2, param3, **optar

我正在使用一段python代码,该代码如下所示:

#script.py

from module import moduleobject

class classname(moduleobject):
    def __init__(self):
        pass
    def lookupFunction(self, **optargs):
        data =self.moduleobjectfunction(param1, param2, param3, **optargs)
        return data
我想返回
lookupFunction()
的结果以及
**optargs
中我自己的参数,我们称之为
arg1

在我的shell中,我编写了以下内容:

from script import classname
a = classname()
a.lookupFunction(arg1)
我的目标是返回self.moduleobjectfunction(param1、param2、param3、arg1)的结果。,但是,我得到以下错误:

TypeError:moduleobjectfunction()最多接受2个参数(给定4个)


我如何解释这一点?3个参数,
param1,param2,param3
是硬编码的,而我只传递
arg1
——我不确定参数不匹配的问题出在哪里。

如果不看到
moduleobject.moduleobjectfunction
,就有点难以更具体,因为您提供的异常是由方法之间的不匹配引起的定义并调用了模块对象函数。显然,它只接受两个(位置)参数,这意味着
self
的实例和您传递给它的另一个参数

看看你的例子,我大胆猜测一下,关于
*name
收集所有剩余的位置参数和
**name
接收关键字参数(在
moduleobjectfunction
中可能会发生,也可能不会发生)存在一些混淆

但是:

这同样适用于仅传递参数的情况。查看文档:和


即使这些问题与您所问的问题没有直接关系,但提供的示例中也很少有其他问题。比如:

  • 参数[1-3]
    未定义
  • 在脚本导入类名()的
    中,括号不应出现
  • 另外,如果您完全重写/擦除(而不是使用或扩展)来自超类的构造函数,那么它们真的应该如何关联

您的调用
self.moduleobjectfunction(param1、param2、param3、**optargs)
将传递至少3个参数,如果存在
optargs
,则会传递更多参数,但
moduleobjectfunction
仅接受1个参数。错误消息还计算隐式的
self
,该数字加1。moduleobjectfunction()的定义在哪里。此外,您试图传入param1 param2和param3,但它们没有传入lookupfunction()中
def f1(*args): ...
# is called
f1(val1, val2, ...)
def f2(**kwargs): ...
# is called
f2(arg1=val1, arg2=val2, ...)