TypeError:Python认为我传递了2个参数给函数,但我只传递了1个

1 投票
3 回答
2719 浏览
提问于 2025-04-16 08:50

我在做一个项目,使用的是Seattle Repy,这是一种简化版的Python。总之,我想自己实现一个队列,这个队列是基于一个list(列表)来做的:

class Queue(list):
    job_count = 0

    def __init__(self):
        list.__init__(self)

    def appendleft(item):
        item.creation_time = getruntime()
        item.current_count = self.job_count
        self.insert(0, item)

    def pop():
        item = self.pop()
        item.pop_time = getruntime()
        return item

现在我在我的主服务器中调用这个队列,使用我自己的Job类来把任务传递给队列:

mycontext['queue'] = Queue()
# ...
job = Job(str(ip), message)
mycontext['queue'].appendleft(job)

最后一行代码出现了一个错误:

错误信息(类型为'exceptions.TypeError'):appendleft() 需要一个参数(但给了两个)

我对Python还比较陌生,能不能有人解释一下,为什么它会认为我给appendleft()传了两个参数,而实际上我只传了一个呢?

3 个回答

3

在Python中,当你调用一个对象的方法时,Python会把这个对象本身作为第一个参数传进去。你需要把你的类的方法修改一下,让它们接受这个必需的第一个参数,通常我们把这个参数叫做 self,这个命名约定是非常强烈的。

可以看看这个链接了解更多 - http://docs.python.org/tutorial/classes.html

6

在Python中,SELF(也就是当前对象)会自动作为第一个参数传递给方法,所以你需要把appendleft这个函数的定义改成:

def appendleft(self, item):

这同样适用于类里面的其他函数定义。它们都需要在函数定义中把SELF作为第一个参数,所以:

def pop():

需要改成:

def pop(self):
7

你在每个函数的定义里都必须写上自我引用:

def appendleft(self, item):

撰写回答