1. 程式人生 > >Python的__getattr__和__setattr__方法,屬性私有化

Python的__getattr__和__setattr__方法,屬性私有化

__getattr__方法:

攔截點號運算。物件.屬性:如果找不到屬性,就會用屬性名作為字串,呼叫該方法;如果繼承樹可以找到該屬性,則不會呼叫該方法

這裡empty類和例項x並沒有屬性age,所以執行x.age時,就會呼叫__getattr__方法,對於name也是同樣。

__setattr__方法: 會攔截所有屬性的的賦值語句。如果定義了這個方法,self.arrt = value 就會變成self.__setattr__("attr", value).

這個需要注意。當在__setattr__方法內對屬性進行賦值是,不可使用self.attr = value,因為他會再次呼叫self.__setattr__("attr", value),則會形成無窮遞迴迴圈,最後導致堆疊溢位異常。應該通過對屬性字典做索引運算來賦值任何例項屬性,也就是使用self.__dict__['name'] = value.

實現屬性的私有化 上述方式是python實現屬性私有化的首選方式。