我有一个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
,列表包含两个元素。但我应该能够将列表作为单个对象传递给函数,不应该吗?我不会总是知道有多少元素。我已经做了很多阅读,但似乎找不到任何曾经遇到过这个问题的人(这很可能让我做错了!)。
答案 0 :(得分:2)
在实例上调用方法时,您不需要包含self
:
self.checkCal(data)
就足够了。
每当您在实例上引用函数名时,Python都会生成方法对象,并且该对象将调用作为第一个参数传递的实例中的原始函数。有关所有技术细节,请参阅descriptor protocol HOWTO。