TypeError:Python认为我传递了2个参数给函数,但我只传递了1个
我在做一个项目,使用的是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):