Python - TypeError: 函数需要2个参数(给了3个) - 但我只给了2个!

3 投票
3 回答
18966 浏览
提问于 2025-04-16 21:51

我正在解析一个病人就诊记录的列表(csv文件)。为此,我创建了一些自定义的类:

class Patient:
    def __init__(self,Rx,ID):
    ....

class PtController:
    def __init__(self,openCSVFile):
        self.dict=DictReader(openCSVFile)
        self.currentPt = ''
        ....

    def initNewPt(self,row):
        Rx = row['Prescription']
        PatientID = row['PatientID']
        self.currentPt = Patient(Rx,PatientID)
        ...

我使用csv.DictReader来处理这个文件,这个功能是内置在PtController类里的。它会逐行读取文件,但在为第一个病人设置值时,执行了以下操作:

firstRow = self.dict.next()
self.initNewPt(self,firstRow)
    ...

出现的错误:

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

如果我在调用initNewPt之前打印(firstRow),它会按预期以字典的形式打印出这一行。

我使用的是python2.7,这是我第一次接触对象编程。你们有什么想法吗?

3 个回答

4

你需要在一个类的方法里调用 initNewPt,但是不要加上 self 这个参数:

self.initNewPt(firstRow)
5

当你调用 self.initNewPt() 这个方法时,不需要把 self 作为参数传进去。因为 self 是一个隐含的参数,系统会自动帮你处理好。

11

你不需要像这样直接传递 selfself.initNewPt(self,firstRow),因为在Python中,self会自动被隐式传递。

撰写回答