代码 - 应该使用以下代码实现 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是我正在使用的类实例)我得到了正确的结果解答!
任何线索?
答案 0 :(得分:2)
您尝试format
实例方法self.__len__
,而不是该实例方法返回的长度。
当您尝试format(self.__len__)
时,它会在repr
引用的实例上调用self
,从而创建递归。
您需要在format
(或self.__len__()
或len(self)
)上使用self.len
。