TypeError:将列表传递给Python函数时参数数量错误

时间:2014-07-18 13:24:34

标签: python list inheritance typeerror

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

class Output():

    def __init__(self, data):
        raise NotImplementedError

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

然后有另一个继承自它的类:

import output

class CSVOutput(output.Output):

    # blah blah blah

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

但是,最后一行会生成TypeError

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

我认为给出的参数数量是3,因为一个是self,列表包含两个元素。但我应该能够将列表作为单个对象传递给函数,不应该吗?我不会总是知道有多少元素。我已经做了很多阅读,但似乎找不到任何曾经遇到过这个问题的人(这很可能让我做错了!)。

1 个答案:

答案 0 :(得分:2)

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

self.checkCal(data)

就足够了。

每当您在实例上引用函数名时,Python都会生成方法对象,并且该对象将调用作为第一个参数传递的实例中的原始函数。有关所有技术细节,请参阅descriptor protocol HOWTO