2011-09-18 37 views
0

代碼 - 應該implent的len個魔術方法用下面的代碼:問題implenting __len__與SQLAlchemy的func.count得到某種遞歸錯誤

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 

我要強調調用再版類的方法,但是當時候我只收到此錯誤我叫len(q)(q是我正在使用的類實例)我得到正確答案!

任何線索?

回答

2

您正在嘗試format實例方法self.__len__,而不是該實例方法返回的長度。

當您嘗試format(self.__len__)時,它會調用reprself所指的實例創建遞歸。

您需要在self.__len__()(或len(self)self.len)上使用format

+1

你們剛纔弄明白應該使用.len。不管怎麼說,還是要謝謝你 – alonisser