TypeError: Python считает, что я передал функции 2 аргумента, но я только передал ее 1 - PullRequest
1 голос
/ 21 декабря 2010

Я работаю над чем-то в Сиэтл Репи , который является ограниченным подмножеством 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 () принимает ровно 1 аргумент (2 дано)

Я относительно новичок в Python, поэтому кто-нибудь может объяснить мне, почему он подумал, что я дал appendleft() два аргумента, когда, очевидно, был только один?

Ответы [ 3 ]

6 голосов
/ 21 декабря 2010

Python автоматически передает SELF (то есть текущий объект) в качестве первого аргумента, поэтому вам нужно изменить определение функции для appendleft на:

def appendleft(self, item):

Это также верно для других определений функций в пределахкласс.Все они требуют SELF в качестве первого параметра в определении функции, поэтому:

def pop():

должно быть:

def pop(self):
6 голосов
/ 21 декабря 2010

Вы должны ввести собственную ссылку в каждом определении функции:

def appendleft(self, item):
3 голосов
/ 21 декабря 2010

Python передает сам объект в качестве первого аргумента его методам.Вам необходимо изменить методы класса, чтобы они принимали обязательный первый аргумент, условно (строгое соглашение) с именем self.

Читать это - http://docs.python.org/tutorial/classes.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...