双下划线”__”
对于Python中的类属性,可以通过双下划线"__“
来实现一定程度的私有化,因为双下划线开头的属性在运行时会被”混淆”(mangling)。
class person(object):
tall = 180
hobbies = []
def __init__(self, name, age,weight):
self.name = name
self.age = age
self.weight = weight
self.__Id = 430
@staticmethod
def infoma():
print(person.tall)
print(person.hobbies)
person.infoma()
Bruce = person("Bruce", 25,180)
print(Bruce.__Id)
Bruce.infoma()
- Output:
180
[]
Traceback (most recent call last):
File "xxx.py", line 23, in <module>
print(Bruce.__Id)
AttributeError: 'person' object has no attribute '__Id'
- 通过内建函数 dir() 可以发现通过混淆来使属性私有的原因,”
__Id
“属性在运行时,属性名被改为了”_person__Id
“(属性名前增加了单下划线和类名)。所以说,即使是双下划线,也没有实现属性的私有化,可以通过其他方式访问。 ```