Функция Python, сообщающая мне, что я отправил два аргумента, когда отправил только один - PullRequest
3 голосов
/ 09 декабря 2010

Я использую Google webapp framework.

То, что я пытаюсь сделать ниже, это просто отправить результаты query.fetch в функцию, которая возьмет результаты и создаст таблицу с ними.

class Utilities(): 
  def create_table(results): 
  #Create a table for the results....

переменная results возвращает два результата из query.fetch

results = query.fetch(10) #This returns two results
util = Utilities()
util.create_table(results)

Тогда я получаю ошибку

util.create_table (results) TypeError: create_table () занимает ровно 1 аргумент (2 дано)

Я думал, что results будет автоматически передано по ссылке. Я ошибся?

Ответы [ 5 ]

9 голосов
/ 09 декабря 2010

Первый аргумент неявно устанавливается python, когда метод привязан к экземпляру. В этом случае ути. При определении метода в классе первый аргумент обычно называется self и является связанным объектом.

class Utilities():
    def create_table(self, results):
         pass # more to come

Должно работать нормально:)

Edit:
Это также означает, что вы можете вызывать такие методы также, когда они не привязаны к экземпляру (т.е. obj.fun ()):

utils = Utilities()
Utilities.create_tables(utils, results)
3 голосов
/ 09 декабря 2010

Должно быть:

def create_table(self, results):

Действительно, «я» всегда передается, но метод должен знать, чтобы его получить!

1 голос
/ 09 декабря 2010

Первый аргумент каждого метода класса Python должен быть экземпляром самого класса. Как соглашение , self является ключевым словом, которое используется для ссылки на экземпляр класса. Нет смысла использовать другое ключевое слово, и настоятельно не рекомендуется соблюдать соглашение self :). Когда метод класса определен, аргумент self должен быть включен, однако, когда метод класса используется, аргумент self присутствует неявно.

Пример:

class C:
def cMethod(self, a1, a2):
    pass
[...]

>>> cinstance = C()
>>> cinstance.cMethod(x1, x2)

Я просто хотел указать на эти два аспекта :). Bye.

1 голос
/ 09 декабря 2010

Вы должны читать на занятиях. Метод класса get (self), отправленный в качестве первого параметра.

Измените его на

class Utilities(): 
    def create_table(self, results): 
1 голос
/ 09 декабря 2010

Первый аргумент, передаваемый методу, является экземпляром класса.Вы должны учитывать это при определении.

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