exec`repr()`时超出了最大递归深度

时间:2016-07-08 07:14:05

标签: python recursion repr

class A(object):
    def xx(self):
        return 'xx'


class B(A):
    def __repr__(self):
        return 'ss%s' % self.xx

b = B()
print repr(b)

当我编写__repr__方法时,我忘了拨打self.xx

为什么这些代码会导致RuntimeError: maximum recursion depth exceeded while getting the str of an object

我的英语很差,希望你们能理解这些。非常感谢你!

1 个答案:

答案 0 :(得分:4)

这就是:

    {li> %s self.xx来电str(self.xx)
  • 方法没有__str__,因此会调用__repr__
  • 方法的__repr__合并repr() self<bound method [classname].[methodname] of [repr(self)]>

    >>> class A(object):
    ...     def xx(self):
    ...         pass
    ...
    >>> A().xx
    <bound method A.xx of <__main__.A object at 0x1007772d0>>
    >>> A.__repr__ = lambda self: '<A object with __repr__>'
    >>> A().xx
    <bound method A.xx of <A object with __repr__>>
    
  • __repr__的{​​{1}}尝试使用self

所以你有一个无限循环。