双下划线”__”

对于Python中的类属性,可以通过双下划线"__“来实现一定程度的私有化,因为双下划线开头的属性在运行时会被”混淆”(mangling)。

  1. class person(object):
  2. tall = 180
  3. hobbies = []
  4. def __init__(self, name, age,weight):
  5. self.name = name
  6. self.age = age
  7. self.weight = weight
  8. self.__Id = 430
  9. @staticmethod
  10. def infoma():
  11. print(person.tall)
  12. print(person.hobbies)
  13. person.infoma()
  14. Bruce = person("Bruce", 25,180)
  15. print(Bruce.__Id)
  16. Bruce.infoma()
  • Output:
  1. 180
  2. []
  3. Traceback (most recent call last):
  4. File "xxx.py", line 23, in <module>
  5. print(Bruce.__Id)
  6. AttributeError: 'person' object has no attribute '__Id'
  • 通过内建函数 dir() 可以发现通过混淆来使属性私有的原因,”__Id“属性在运行时,属性名被改为了”_person__Id“(属性名前增加了单下划线和类名)。所以说,即使是双下划线,也没有实现属性的私有化,可以通过其他方式访问。 ```