python单/双下划线使用

在Python编程中经常会遇到函数(function),方法(method)及属性(attribute)以下划线‘_‘作为前缀,这里做个总结。

主要存在四种情形:

1 1. object # public
2 2. __object__ # special, python system use, user should not define like it
3 3. __object # private (name mangling during runtime)
4 4. _object # obey python coding convention, consider it as private

1和2两种情形比较容易理解,不多做解释,最迷惑人的就是3和4情形。

在解释3和4情形前,首先了解下python有关private的描述,python中不存在protected的概念,要么是public要么就是private,但是python中的private不像C++, Java那样,它并不是真正意义上的private,通过name mangling(名称改编,下面例子说明)机制就可以访问private了。

 1 class Foo():
 2     def __init__():
 3         ...
 4     def public_method():
 5         print ‘This is public method‘
 6     def __fullprivate_method():
 7         print ‘This is double underscore leading method‘
 8     def _halfprivate_method():
 9         print ‘This is one underscore leading method‘
10
11 f = Foo()
12 f.public_method() # OK
13 f.__fullprivate_method() # Error occur
14 f._halfprivate_method() # OK

上文已经说明了,python中并没有真正意义的private,见以下方法便能够访问__fullprivate_method()

  

时间: 2024-10-19 14:58:16

python单/双下划线使用的相关文章

理解Python的双下划线命名

引子 我热情地邀请大家猜测下面这段程序的输出: class A(object): def __init__(self): self.__private() self.public() def __private(self): print 'A.__private()' def public(self): print 'A.public()' class B(A): def __private(self): print 'B.__private()' def public(self): print

python 单下划线/双下划线使用总结(转载)

python 单下划线/双下划线使用总结 时间:2013-10-08 10:56来源:www.chengxuyuans.com Python 用下划线作为变量前缀和后缀指定特殊变量/方法. 主要存在四种情形1.    1. object # public    2. __object__ # special, python system use, user should not define like it    3. __object # private (name mangling duri

python——双下划线与python命名机制

python中双下划线的作用(1)所有以双下划线开头的成员是私有的(2)python对于私有变量是会进行扎压(mangling)的,扎压规则是原始定义:class A():    __function():          print '__function is private! '扎压之后:class A():    _A__function():          print '__function is private!' 同时,在class A中对于以前__function()的调用

详解 Python 中的下划线命名规则

在 python 中,下划线命名规则往往令初学者相当 疑惑:单下划线.双下划线.双下划线还分前后……那它们的作用与使用场景 到底有何区别呢?今天 就来聊聊这个话题. 1.单下划线(_) 通常情况下,单下划线(_)会在以下3种场景中使用: 1.1 在解释器中: 在这种情况下,“_”代表交互式解释器会话中上一条执行的语句的结果.这种用法首先被标准CPython解释器采用,然后其他类型的解释器也先后采用. >>> _ Traceback (most recent call last): Fil

Python中的下划线(译文)

原文地址这篇文章讨论Python中下划线_的使用.跟Python中很多用法类似,下划线_的不同用法绝大部分(不全是)都是一种惯例约定. 单个下划线(_) 主要有三种情况: 1. 解释器中 _符号是指交互解释器中最后一次执行语句的返回结果.这种用法最初出现在CPython解释器中,其他解释器后来也都跟进了. >>> _ Traceback (most recent call last): File "", line 1, in NameError: name '_' i

python 里面的单下划线与双下划线的区别(私有和保护)

Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx 不能用'from module import *'导入 ——变量名_xxx被看作是“私有 的”,在模块或类外不可以使用.__xxx__ 系统定义名字 ——__xxx 类中的私有变量名 ——只有类对象自己能访问,连子类对象也不能访问到这个数据. 核心风格:避免用下划线作为变量名的开始. 因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始.一般来讲,变量名_xxx被看作是“私有 的

python 里面的单下划线与双下划线的区别

python 里面的单下划线与双下划线的区别 Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划线作为变量名的开始. 因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下 划线作为变量名的开始.一般来讲,变量名_xxx被看作是“私有 的”,在模块或类外不可以使用. 当变量是私有的时候,用_xxx 来表示变量是很好的习

python中的单下划线和双下划线意义和作用

Python中并没有真正意义上的“私有”,类的属性的的可见性取决于属性的名字(这里的属性包括了函数).例如,以单下划线开头的属性(例如_spam),应被当成API中非公有的部分(但是注意,它们仍然可以被访问),一般是具体实现细节的部分.单下划线常用来实现模块级私有化,当我们使用“from mymodule import *”来加载模块的时候,不会加载以单下划线开头的模块属性. 而以双下划线开头并最多以一个下划线结尾的属性(例如___spam),将会被替换成_classname__spam这样的形

python单下划线、双下划线、头尾双下划线说明:

单下划线.双下划线.头尾双下划线说明: __foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的. _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import * __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了. 来源: http://www.runoob.com/python/python-object.htm