python中的标识符可以包含数字、字母和_,但必须以字母或者_开头,其中以_开头的命名一般具有特殊的意义。

前后均带有双下划线__的命名

一般用于特殊方法的命名,用来实现对象的一些行为或者功能,比如__new__()方法用来创建实例,__init__()方法用来初始化对象,

x + y操作被映射为方法x.__add__(y),序列或者字典的索引操作x[k]映射为x.__getitem__(k)__len__()__str__()分别被内置函数len()、str()调用等等。

仅开头带双下划线__的命名

用于对象的数据封装,以此命名的属性或者方法为类的私有属性或者私有方法。

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Foo(object):def __init__(self):self.__name = 'private name'def getname(self):return self.__namedef __spam(self):print 'private method'def bar(self):self.__spam()

如果在外部直接访问私有属性或者方法:

>>> f = Foo()
>>> f.__nameTraceback (most recent call last):File "<pyshell#1>", line 1, in <module>f.__name
AttributeError: 'Foo' object has no attribute '__name'
>>> f.__spam()Traceback (most recent call last):File "<pyshell#2>", line 1, in <module>f.__spam()
AttributeError: 'Foo' object has no attribute '__spam'

是不可行的,这就起到了隐藏数据的作用,但是这种实现机制并不是很严格,机制是通过自动"变形"实现的,类中所有以双下划线开头的名称__name都会自动变为"_类名__name"的新名称:

>>> f._Foo__name
'private name'
>>> f._Foo__spam()
private method

这样就可以访问了。

这种机制可以阻止继承类重新定义或者更改方法的实现,比如,定义一个Foo的派生类:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Goo(Foo):def __spam(self):print 'private method of Goo'

重写了__spam方法,运行:

>>> g = Goo()
>>> g.bar()
private method

调用bar()方法的时候依然执行的是Foo类的__spam()方法,因为在bar()方法的实现中,self.__spam()已自动变形为self._Foo__spam(),Goo继承的bar()方法也是如此。

以单下划线_开头的命名

一般用于模块中的"私有"定义的命名。

from module import *语句用于加载模块中的所有名称,要控制导入的名称,一种方法是定义列表__all__,只有在__all__中的名称才能通过*导入,

另一种方法就是以单下划线开头命名定义了,这种定义不会被*导入。

当然,在类中也可以用单下划线开头来命名属性或者方法,这只是表示类的定义者希望这些属性或者方法是"私有的",但实际上并不会起任何作用。

Python带下划线的变量或函数命名详细介绍相关推荐

  1. python变量必须以字母和下划线_【转载】关于python中带下划线的变量和函数的意义...

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

  2. python中变量和函数的区别_关于python中带下划线的变量和函数 的意义

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

  3. 关于python中带下划线的变量和函数 的意义

    转载:https://www.cnblogs.com/wangshuyi/p/6096362.html 总结: 变量: 1.  前带_的变量:  标明是一个私有变量, 只用于标明, 外部类还是可以访问 ...

  4. 关于python中带下划线的变量和函数 的意义,class类带一个下划线和带两个下划线的定义

    总结: 变量: 1.  前带_的变量:  标明是一个私有变量, 只用于标明, 外部类还是可以访问到这个变量 2.  前带两个_ ,后带两个_ 的变量:  标明是内置变量, 3.  大写加下划线的变量: ...

  5. python中变量和函数的区别_python中带下划线的变量和函数的意义

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

  6. python中定义变量为啥要用下划线_关于python中带下划线的变量和函数 的意义

    核心风格:避免用下划线作为变量名的开始. 因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始. 一般来讲,变量名_xxx被看作是"私有 ...

  7. python中标识符下划线用作开头_python python中那些双下划线开头的那些函数都是干啥用用的...

    1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...

  8. python类实例化 输入参数名字 下划线_Python 用下划线作为变量前缀和后缀指定特殊变量...

    原:http://blog.163.com/jackylau_v/blog/static/175754040201182113817834/ 转过来方便查阅=w= Python 用下划线作为变量前缀和 ...

  9. python中那些双下划线开头的那些函数都是干啥用用的

    1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...

最新文章

  1. STL链式存储结构——————list链表
  2. shell比较两个字符串是否相等
  3. 2017—2018 实验报告:实验一
  4. Java面试题之有没有有顺序的Map实现类,如果有,他们是怎么实现有序的?
  5. 转: CentOS 安装 SVN1.8 客户端
  6. 关于量子计算机的科学论文,量子计算机论文,关于科学家尝试用量子计算机创造时间旅行论文范文-毕业论文网...
  7. 二元函数可导与可微的关系_视频教学:期末试卷解析之多元函数基本概念及相互关系讨论...
  8. python编写登录接口_Python之编写登录接口
  9. js 不相等 多次随机数_node.js静态\动态服务器
  10. 中国互联网的那些事——二十年回顾
  11. RIP总结(转自鸿鹄论坛)
  12. 四大汽车总线:LIN、CAN、FlexRay、MOST简述
  13. 从网页中获取图片链接的方法。
  14. 【计算机网络】网络数据传输流程详解
  15. 玄秘塔碑-唐代柳公权创作书法作品
  16. 爬取网页表格到Excel ?别再复制粘贴了,太慢!
  17. Junit-对涉及数据库操作的服务进行单元测试
  18. 一起来玩玩WebGL--第一弹
  19. qrcode实现二维码
  20. 优信拍集团php面试题_【优信拍PHP面试】一次不错的面试体验,面试官根据实际出发提问。-看准网...

热门文章

  1. 错误:Failed to create the Java Virtual Machine
  2. Windows server 2008文件服务器之二屏蔽影音文件以及指定文件名
  3. 【实用】ALV 清单右击隐藏列失效的处理
  4. 【QM-05】Material Specification(物料说明)
  5. 【基础】ABAP不同变量类型之间数值大小比较
  6. 定义进项税代码缺省值
  7. LINK : fatal error LNK1168: cannot open Debug/Test.exe for writing
  8. SAP MM 库存初始化和批量扩充物料仓位
  9. SAP SF打印次数统计
  10. SQVI和SAP查询QUERY的区别和使用注意事项