欢迎各位兄弟 发布技术文章
这里的技术是共享的
Python 用下划线作为变量前缀和后缀指定特殊变量。
_xxx 不能用'from moduleimport *'导入
__xxx__ 系统定义名字
__xxx 类中的私有变量名
核心风格:避免用下划线作为变量名的开始。
因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。一般来讲,变量名_xxx被看作是“私有 的”,在模块或类外不可以使用。当变量是私有的时候,用_xxx 来表示变量是很好的习惯。因为变量名__xxx__对Python 来说有特殊含义,对于普通的变量应当避免这种命名风格。
"单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;
"双下划线" 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入;以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如 __init__()代表类的构造函数。
结论:
1、_xxx 不能用于’from module import *’ 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。
2、__xxx 双下划线的表示的是私有类型的变量。只能是允许这个类本身进行访问了。连子类也不可以
3、__xxx___ 定义的是特列方法。像__init__之类的我们都知道,Python没有“私有变量”这样的说法,如果想访问,始终是有办法,但使用双下划线“__”,可以很大程度上实现“私有”。这里无需多言。
那么单下划线“_“开始的特性呢?很多书里面都没有说清楚,这里我谈谈我的看法。如果不对,欢迎各位指正。
直接上简单代码:
也就是说,真正能起到“私有”作用的,还是“__”。这样使用双下划线,又被称为name-mangling。
那么,单下划线开头的特性到底有什么用呢?
If you don’t want the name-mangling effect, but you still want to send a signal for other
objects to stay away, you can use a single initial underscore.
----《Beginning Python From Novice to Professional》
因为我个人英文不好,我的理解是这样:如果你不想使用“__”,但是又想让其他对象远离它,那就使用“_”。
总结:
1.带有单下划线的特性不会被 from module import *导入。
2.单下划线是Python程序员使用类时的约定,表明程序员不希望类的用户直接访问属性。仅仅是一种约定!实际上,实例._变量,可以被访问。
来自 http://blog.csdn.net/debugm/article/details/8179482
Python中并没有真正意义上的“私有”,类的属性的的可见性取决于属性的名字(这里的属性包括了函数)。例如,以单下划线开头的属性(例如_spam),应被当成API中非公有的部分(但是注意,它们仍然可以被访问),一般是具体实现细节的部分。单下划线常用来实现模块级别私有化,当我们使用“from
而以双下划线开头并最多以一个下划线结尾的属性(例如___spam),将会被替换成_classname__spam这样的形式,其中classname是当前类的类名。知道了这点之后,我们仍然可以访问到python的私有函数(具体请参考http://blog.sina.com.cn/s/blog_3fe961ae0100oyce.html
来自 http://blog.sina.com.cn/s/blog_3fe961ae010115xp.html