python中关于下划线的整理
来源:互联网 发布:金蝶软件客服中心 编辑:程序博客网 时间:2024/05/16 11:05
最近在学习python,发现python的变量命名很有意思,尤其是加入下划线之后,作为一个准程序员,良好的代码规法一定要有,所以花时间找了一些资料,整理了一下。
首先,直接上结论:
Python 用下划线作为变量前缀和后缀指定特殊变量
_xxx 不能用’from module import *’导入
_xxx_ 系统定义名字
__xxx 类中的私有变量名
所以Python的核心风格有一条:避免用下划线作为变量名的开始。
一、具体说明:
因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。一般来讲,变量名_xxx被看作是“私有 的”,在模块或类外不可以使用。当变量是私有的时候,用_xxx 来表示变量是很好的习惯。因为变量名__xxx__对Python 来说有特殊含义,对于普通的变量应当避免这种命名风格。 “单下划线” 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量; “双下划线” 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。 以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入; 正如Python文档中所述:以下划线“_”为前缀的名称(如_spam)应该被视为API中非公开的部分(不管是函数、方法还是数据成员)。此时,应该将它们看作是一种实现细节,在修改它们时无需对外部通知。 以双下划线(__)开头的用法并不是一种惯例,对解释器来说它有特定的意义。Python中的这种用法是为了避免与子类定义的名称冲突。 Python文档指出:“__spam”这种形式(至少两个前导下划线,最多一个后续下划线)的任何标识符将会被“_classname__spam”这种形式原文取代,在这里“classname”是去掉前导下划线的当前类名。 以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如 __init__()代表类的构造函数。 这种用法表示Python中特殊的方法名。其实,这只是一种惯例,对Python系统来说,这将确保不会与用户自定义的名称冲突。通常,你将会覆写这些方法,并在里面实现你所需要的功能,以便Python调用它们。例如,当定义一个类时,你经常会覆写“__init__”方法。
二、应用示例
- 丢弃不必要的变量名
for i in range(6): #do something
这里的变量 i 并没有实际意义,所以可以用下划线_来代替。
当你遇到一个不得不定义却又没有实际意义的变量时,都应该用下划线”-“来代替,用于提高代码的可维护性。
2.使一个变量变成私有变量
这里的下划线“-”和Java里的private有一样的功能,如果一个变量或函数以__(两个下画线“-”)开头,则表示这个变量或函数只能在此类或此模块中被访问
3.保护父类中的方法不会被重写
class A(): def __say_hello(self): print "hello from A" class B(A): def __say_hello(self): print "hello from B" a = A() b = B() print dir(a), dir(b) print b._A__say_hello(), b._B__say_hello() /Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/xxx/PycharmProjects/untitled/b.py ['_A__say_hello', '__doc__', '__module__'] ['_A__say_hello', '_B__say_hello', '__doc__', '__module__'] hello from A None hello from B None Process finished with exit code 0
从上面的例子中可以看出子类B没有重写父类A中的_say_hello()方法是因为类中以‘两个下划线–’开头的方法会被Python自动替换为[class_name][method_name]的形式,在外部不能用方法名直接调用这些方法,相当于类中的私有方法。
三、一些python系统保留定义的方法和属性
1、 python的内部保留属性:
2、 python的保留方法:
见文章:Python的保留方法
参考文章:
文章一: http://cdn.verydemo.com/demo_c122_i21159.html
文章二: http://blog.sina.com.cn/s/blog_64d0b03c0101gg0c.html
0 0
- python中关于下划线的整理
- 关于python的下划线理解
- Python中关于下划线的标识符的意义
- Python中单下划线和双下划线的区别
- Python中单下划线开头的特性
- Python中单下划线,双下划线,俩头下划线的区别。
- 关于python下划线命名的事儿以及magic变量相关
- python的下划线
- Python的下划线
- 关于TextView的下划线
- python 的单下划线和双下划线
- PYTHON中对象命名的单下划线与双下划线的区别(私有和保护)
- 关于HTML中超链接的下划线的取消的方式
- python中,单下划线与双下划线的命名方式(私有和保护)
- Python3中关于下划线变量和命名的总结
- python下划线变量的含义
- python下划线变量的含义
- python下划线变量的含义
- Oracle 数据库基础
- HotSpot学习第一天
- java移位运算符
- 数据类型转换
- 【51Nod】1284 - 2 3 5 7的倍数(容斥原理 & 二进制优化)
- python中关于下划线的整理
- java:applet的实现
- 删数问题 贪心法
- ajax使用params
- UML-活动图
- 捋顺Struck SVM------之--------从一堆sample中选出一些作为sv的准则
- awstats CGI模式下动态生成页面缓慢的改进
- hadoop2.x的集群搭建
- 【各大OJ】DPDPD~