Как вызывать методы внутри класса в Python - проблема TypeError - PullRequest
1 голос
/ 24 августа 2010

У меня есть класс Python, и в этом классе я вызываю 2 разных метода из одного из других методов.Один работает, а другой дает мне TypeError: get_doms () принимает ровно 1 аргумент (2 дано):

  def start(self,cursor):
    recs = self.get_recs(cursor)  # No errors here
    doms = self.get_doms(cursor)  # I  get a TypeError here




  def get_doms(self,cursor):
    cursor.execute("select domain from domains")
    doms = []
    for i in cursor._rows:
      doms.append(i[0])
    return doms

  def get_recs(self,cursor):
    cursor.execute("select * from records")
    recs = []
    print cursor._rows
    recs = [list(i) for i in cursor._rows]
    return recs

Как мне успешно вызывать методы в моем классе из других методов в том же классе?Почему один работает, а другой нет?~~ спасибо ~~ * * 1004

Ответы [ 2 ]

0 голосов
/ 24 августа 2010

Как сказал gnibbler, вы, вероятно, где-нибудь пропатчите метод get_doms и замените его нормальной функцией вместо привязанного метода (метод связывается, то есть сохраняет свою переменную self, когда он определен в классе, и вы получите доступ к нему в объекте). Вам необходимо либо обезопасить этот метод от класса, но не от объекта, или использовать замыкание для эмуляции привязки, как в js.

0 голосов
/ 24 августа 2010

Я не могу воспроизвести упомянутую вами ошибку.Я думаю, что код в порядке.Но я предлагаю не использовать cursor._rows, потому что атрибут _rows является личным атрибутом.Закрытые атрибуты являются деталями реализации - они гарантированно не будут присутствовать в будущих версиях cursor.Вы можете добиться того, чего хотите, без него, поскольку cursor сам является итератором:

def start(self,cursor):
    recs = self.get_recs(cursor)  
    doms = self.get_doms(cursor)  
    print(recs)
    print(doms)
def get_doms(self,cursor):
    cursor.execute("select domain from domains")
    doms = [row[0] for row in cursor]
    return doms

def get_recs(self,cursor):
    cursor.execute("select * from records")
    recs=[list(row) for row in cursor]
    return recs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...