使用sqlalchemy func.count实现__len__会出现某种递归错误的问题

时间:2011-09-18 21:37:19

标签: python database sqlalchemy

代码 - 应该使用以下代码实现 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 个答案:

答案 0 :(得分:2)

您尝试format实例方法self.__len__,而不是该实例方法返回的长度。

当您尝试format(self.__len__)时,它会在repr引用的实例上调用self,从而创建递归。

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