python类的私有成员名称分割转换
Private name mangling 私有名割断
即在初步编译阶段,对以两个以及上个下划线开头,且未以两个下划线结尾的属性或方法,解释器会自动插入一个下划线和和其类名,例如在一个名为‘Sun’的类中定义了一个属性‘__size’,则解释器会自动将其转换为‘_Sun__size’,如果超过255个字符,可能进行截取。这也就是python实现私有成员变量不得访问的机制了。
从外部访问类的私有成员
- 利用上面介绍的转换特性,我们可以使用转换后后的名字来访问类的私有成员:
>>> class Sun:
... __size = 15
...
>>> Sun.__size
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'Sun' has no attribute '__size'
>>> Sun._Sun__size
15
浙公网安备 33010602011771号