Python類的私有化屬性名字重整

python 類在__init__方法中初始化屬性的時候,如果以(self.__name)的雙下劃線形式開頭則代表這個屬性爲類的私有化屬性,那麼,我們在實例化之後想要通過該名稱直接獲取該屬性是獲取不到的,通過調用實例化類對象的__dict__方法可以看到,他把這個雙下劃線的屬性名稱給修改了,變成了(_類名__屬性名)的這種形式,那我們後續的操作如果想修改和訪問該屬性就得通過重整後的名稱來修改該屬性,否則直接通過該屬性名去修改,並不是真的修改了該屬性,而是新增了一個屬性,如下邊的例子所示!

>>> class Test:
...     def __init__(self, name):
...         self.__name = name
... 
>>> test = Test('test_name')
>>> test.__name
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'Test' object has no attribute '__name'
>>> test.__dict__
{'_Test__name': 'test_name'}
>>> test._Test__name
'test_name'
>>> test.__name = "new test name"
>>> test.__dict__
{'_Test__name': 'test_name', '__name': 'new test name'}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章