类型错误:将列表传递给python函数时参数数目错误

TypeError: wrong number of arguments when passing list to Python function

本问题已经有最佳答案,请猛点这里访问。

我有一个python父类,它包含一个传递列表的函数,然后检查其中是否包含特定的元素(键):

1
2
3
4
5
6
7
8
class Output():

    def __init__(self, data):
        raise NotImplementedError

    def checkCal(self, options):
        if"calendar" in options:
            #do some stuff

然后有另一个类继承它:

1
2
3
4
5
6
7
8
9
10
import output

class CSVOutput(output.Output):

    # blah blah blah

    def theFunction(self, data):
        data["first"] ="hello"
        data["second"] ="calendar"
        self.checkCal(self, data)

但是,最后一行产生一个TypeError

1
TypeError: checkCal() takes exactly 2 arguments (3 given)

我假设给出的参数数量是三,因为一个是self,列表包含两个元素。但我应该能够将列表作为单个对象传递给函数,不是吗?我不知道有多少元素。我读了很多书,但似乎找不到以前遇到过这个问题的人(这很可能是我做错了!).


在实例上调用方法时,不需要包括self

1
self.checkCal(data)

够了。

每当引用实例上的函数名时,python就会生成一个方法对象,该对象将调用作为第一个参数传入实例中的原始函数。有关所有技术细节,请参阅描述符协议howto。