проблема с реализацией __len__ с sqlalchemy func.count, получая какую-то ошибку рекурсии - PullRequest
0 голосов
/ 19 сентября 2011

код - должен реализовывать магический метод len со следующим кодом:

    def __len__(self):

    from sqlalchemy import func
    self.len = session.query(func.count(Question.id)).scalar()
    return int(self.len)

def __repr__(self):

    self.repr = "traffic theory question, current number of questions:{0}".format(self.__len__)
    return self.repr

что я получаю (3 верхние строки продолжают повторяться в длинном списке, а затемзавершить следующей строкой):

  File "C:\Python27\dir\file.py", line 129, in __repr__
    self.repr = "traffic theory question, current number of questions:{0}".format(self.__len__)
RuntimeError: maximum recursion depth exceeded while getting the str of an object

Я должен подчеркнуть, что я получаю эту ошибку только при вызове метода класса repr , но когда я вызываю len (q) (q - этоэкземпляр класса, с которым я работаю) Я получаю правильный ответ!

какие-либо подсказки?

1 Ответ

2 голосов
/ 19 сентября 2011

Вы пытаетесь format метод экземпляра, self.__len__, а не длина, возвращаемая этим методом экземпляра.

Когда вы пытаетесь format(self.__len__), он вызывает repr в экземпляре, указанном self, создавая рекурсию.

Вам нужно использовать format на self.__len__() (или len(self) или self.len).

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