2016-07-08 20 views
0
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執行exec` repr()時出現最大遞歸深度

爲什麼這些代碼導致RuntimeError: maximum recursion depth exceeded while getting the str of an object

我的英語很差,希望你們能理解這些。非常感謝你!

+0

@skyking:是的,OP意識到這一點。他們在問題*中聲明他們忘記調用self.xx。 –

回答

4

這是發生了什麼:

  • %sself.xx電話str(self.xx)
  • 的方法沒有__str__,所以__repr__被調用它來代替。
  • __repr__一種方法包含的selfrepr()<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__>> 
    
  • self__repr__的嘗試使用'ss%s' % self.xx

等你有一個無限循環。