foo:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突.

_foo:一种约定,用来指定变量私有.程序员用来指定私有变量的一种方式.

__foo:这个有真正的意义:解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名.

首先是单下划线开头,这个被常用于模块中,在一个模块中以单下划线开头的变量和函数被默认当作内部函数,如果使用 from a_module import * 导入时,这部分变量和函数不会被导入。不过值得注意的是,如果使用 import a_module 这样导入模块,仍然可以用 a_module.some_var 这样的形式访问到这样的对象。在 Python 的官方推荐的代码样式中,还有一种单下划线结尾的样式,这在解析时并没有特别的含义,但通常用于和 Python 关键词区分开来,比如如果我们需要一个变量叫做 class,但 class 是 Python 的关键词,就可以以单下划线结尾写作 class。双下划线开头的命名形式在 Python 的类成员中使用表示名字改编 (Name Mangling),即如果有一 Test 类里有一成员 x,那么 dir(Test) 时会看到 _Test__x 而非 __x。这是为了避免该成员的名称与子类中的名称冲突。但要注意这要求该名称末尾没有下划线。双下划线开头双下划线结尾的是一些 Python 的“魔术”对象,如类成员的 __initdeladdgetitem 等,以及全局的 filename 等。 Python 官方推荐永远不要将这样的命名方式应用于自己的变量或函数,而是按照文档说明来使用。另外单下划线开头还有一种一般不会用到的情况在于使用一个 C 编写的扩展库有时会用下划线开头命名,然后使用一个去掉下划线的 Python 模块进行包装。如 struct 这个模块实际上是 C 模块 _struct 的一个 Python 包装。

详情见:http://stackoverflow.com/questions/1301346/the-meaning-of-a-single-and-a-double-underscore-before-an-object-name-in-python

实例:

...     def __init__(self):
...             self.__superprivate = "Hello"
...             self._semiprivate = ", world!"
...
>>> mc = MyClass()
>>> print mc.__superprivate
Traceback (most recent call last):File "<stdin>", line 1, in <module>
AttributeError: myClass instance has no attribute '__superprivate'
>>> print mc._semiprivate
, world!
>>> print mc.__dict__
{'_MyClass__superprivate': 'Hello', '_semiprivate': ', world!'}

更多内容访问omegaxyz.com

Python单下划线与双下划线相关推荐

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

    python 里面的单下划线与双下划线的区别 Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __ ...

  2. Python笔记 · 私有方法、私有属性 单下划线、双下划线

    首先,不同于其他编程语言,Python中不存在真正意义上的"私有方法/属性",Python中所胃的"私有方法"要么基于约定,要么基于编译期的改写(Name Ma ...

  3. 浅谈python 里面的单下划线与双下划线的区别

    更新时间:2017年12月01日 10:30:13   作者:空气中的臭氧 这篇文章主要介绍了浅谈python 里面的单下划线与双下划线的区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起 ...

  4. python双划线_python 单下划线与双下划线的区别

    原标题:python 单下划线与双下划线的区别 python中下环线共有5中 下面开始一一介绍 1.单前导下划线 _xxx: 变量前面使用单下划线,用于指定该名称为"私有".为方便 ...

  5. python中单下划线_foo与双下划线_Python中单下划线和双下划线

    什么是 Python? Python 之父 Guido van Rossum 说:Python是一种高级程序语言,其核心设计哲学是代码可读性和语法,能够让程序员用很少的代码来表达自己的想法. 对于我来 ...

  6. 【Python特性】Python中的下划线和双下划线是什么意思?

    平时写代码经常碰到下划线.双下划线等"奇怪"的写法,今天特意花时间彻底解决这个问题.文章内容主要参考<深入理解Python特性>一书. 文章目录 前置单下划线:_var ...

  7. [Python3] Python中单下划线和双下划线的含义

    本文介绍了Python中单下划线和双下划线("dunder")的各种含义和命名约定,名称修饰(name mangling)的工作原理,以及它如何影响你自己的Python类. 单下划 ...

  8. Python中单下划线和双下划线

    结合书籍,我的理解: 前后双下划线的类中的方法:是特殊方法,用于运算符重载,可以截获运算符. 比如__init__(...)可以截获类的实例化类名(): __add__可以截获 +: __str__可 ...

  9. java双下划线改单下划线_单下划线与双下划线的区别

    内容目录 单下划线与双下划线的区别 ​ Python用下划线作为前缀和后缀指定特殊变量和定义方法,主要有如下四种形式: 单下划线(_) 名称前的单下划线(如:_name) 名称前的双下划线(如:__n ...

  10. Python中的下划线、双下划线

    单下划线和双下划线在Python变量名和方法名中都有各自的含义.有些仅仅是作为约定,用于提示开发人员:而另一些则对Python解释器有特殊含义. 总的来说有一下几种情况: 前置单下划线:_var 后置 ...

最新文章

  1. Python 发送 email 的三种方式
  2. 中国国际智能产业博览会-2018-08-23至25 重庆国际博览中心举行
  3. 未来期间的过帐运行已申请(检查条目)
  4. Jonathan Bryce说:OpenStack属于全世界,并不属于一个公司,也不会属于一个国家……...
  5. python获取mysql中的数据供js调用_详解js文件通过python访问数据库方法
  6. 【LeetCode 剑指offer刷题】矩阵题1:4 有序矩阵中的查找( 74. Search a 2D Matrix )(系列)...
  7. 自动驾驶即将迎来下一个飞跃?
  8. response.setHeader各种使用方法
  9. 浅析单调递增子序列问题(LIS)
  10. php抓取访客国旗,爬取世界各国和地区数据国旗和国徽的高清图标和图片
  11. 设计模式之中介者模式
  12. unity商店demo学习:俯视视角RPG游戏
  13. 抖音多闪数次声明被打脸 法院正式裁定抖音违规
  14. 利用Python自动生成请假条,实现高效摸鱼
  15. 全网最全Python操作Excel教程,赶紧收藏
  16. 一位中科院自动化研究所博士的论文致谢:求学22载,计算机终成一生的事业与希望...
  17. 智慧职教云答案在哪里找_智慧职教云答案在哪里找到,职教云答案软件,职教云题库答案哪里能搜到答案的软件...
  18. 技术导航网站源码_qq技术导航_小刀娱乐网源码
  19. React第一次的笔记整理
  20. 960帧高速摄影原理及知识普及(红米K20Pro)

热门文章

  1. in the java search_Java SearchRequest.indices方法代碼示例
  2. winform定义数据源名称_C#中数据源绑定DataSource以及相关控件(DataGridView)的使用总结...
  3. (day 45 - 中序遍历 ) 剑指 Offer 54. 二叉搜索树的第k大节点
  4. (day 39 - 动态规划) 剑指 Offer 47. 礼物的最大价值
  5. (day 37 - 动态规划)剑指 Offer 46. 把数字翻译成字符串
  6. pytorch l2正则化_理解机器学习中的 L2 正则化
  7. eclipse java machine_打开Eclipse弹出“No java virtual machine was found...的解决方法
  8. Arcgis更换布局模板_小美AI触屏音箱评测 美的布局AloT的关键一环
  9. 用fpga实现永磁同步电机控制_永磁同步电机控制系统仿真系列文章—旋转变压器...
  10. Bloom Filter的基本原理和变种