2011-03-18 135 views
1

我想請教各位一個Python代碼:爲什麼不是無限遞歸?

class UserDict: 
    def __init__(self, dict=None, **kwargs): 
     self.data = {} 
     if dict is not None: 
      self.update(dict) 
     if len(kwargs): 
      self.update(kwargs) 
    def clear(self): self.data.clear() 

這裏,clear(self)UserDict類的方法,並在類的data屬性進行操作,對不對?這個功能永遠不會在data上運行嗎?因爲它每次都會自動調用?

回答

2

不,這種方法調用data字典的clear方法,這與UserDict完全無關。

6

UserDict.clear()來電self.data.clear()self.data的類型是dict,而不是UserDict,所以它調用了不同的方法,而不是它本身。如果UserDict.clear()調用self.clear()而不是self.data.clear(),那將是無限遞歸。