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'}

 

posted @ 2022-08-23 23:07  幸福关中  阅读(47)  评论(0编辑  收藏  举报