1,_xxx 不能用于'from module import *' 以单下划线开头的表示的是 protected 类型的变量.
即保护类型只能允许其本身与子类进行访问.
2,__xxx 双下划线的表示的是私有类型的变量. 只能是允许这个类本身进行访问了. 连子类也
不可以
3,__xxx___ 定义的是特列方法. 像__init__之类的
实例
- >>>
- class student(object):
- __name = 0
- _sex = 'male'
- >>> student.__dict__
- mappingproxy({'__module__': '__main__', '_student__name': 0, '_sex': 'male', '__dict__': <attribute '__dict__' of 'student' objects>, '__weakref__': <attribute '__weakref__' of 'student' objects>, '__doc__': None})
- >>> student.__name
- Traceback (most recent call last):
- File "<pyshell#58>", line 1, in <module>
- student.__name
- AttributeError: type object 'student' has no attribute '__name'
- >>> student._student__name
- >>> student._sex
- 'male'
总结: 我们声明了一个学生类, 分别用但下划线和双下划线定义了一个成员, 然后我们试图访问成员, 我们发现: 双下划线的成员无法直接访问, 通过__dict__我们看到, 在类的内部, Python 自动将__name 解释成 _student__name, 于是我们用 _student__name 访问, 这次成功. 然而,_name 不受影响. 所以: 两头下划线: Python 类内置成员专用, 区别用户自定义成员
来源: http://www.bubuko.com/infodetail-2655878.html