首先,单下划线开头,这个常被用于模块中,在一个模块中以单下划线开头的变量和函数被默认当做内部函数,如果使用from  module  import  *导入时,这部分变量和函数不会被导入。注意,如果使用import module导入模块,仍然可以用module._some_var这样的形式访问到这样的对象。

在Python官方推荐的代码样式中,还有一种单下划线结尾的样式,这在解析时并没有特别的含义,但通常用于和Python关键词区分开来,比如,如果我们需要一个变量叫做class,但class是Python关键词,就可以以单下划线结尾,写作class_。

双下划线开头的命名形式,在Python的类成员中使用表示名字改变(name mangling),即如果Student类里有一成员_x,那么dir( Student )时会看到_Student__x而不是__x。这是为了避免该成员的名称与子类中的名称冲突。但要注意:这要求该名称末尾没有下划线。

双下划线开头、双下划线结尾的是Python的特殊变量,“魔术”对象,如__init__、__del__、__add__、__getitem__等,以及全局的__file__、__name__等。Python官方推荐永远不要将这样的命名方式应用于自己的变量或函数,而是按照文档说明来使用。

另外,单下划线开头还有一种一般不会用到的情况,在于使用一个C编写的扩展库,有时会用下划线开头命名,然后使用一个去掉下划线的Python模块进行包装。如struct这个模块实际上是C模块_struct的一个Python包装。

1,_xxx表示的是protected类型的变量,不能用于 from module import *,即保护类型只允许这个类本身与子类进行访问。

2,__xxx表示的是私有类型的变量,只能允许这个类本身进行访问,连子类也不能访问。

3,__xxx__表示特殊变量,如__init__,__del__,__call__

 
 

作者:知乎用户
链接:https://www.zhihu.com/question/19754941/answer/12860775

Python的类的下划线命名的区别的更多相关文章

  1. Python 的类的下划线命名有什么不同?

    1.   以一个下划线开头的命名 ,如_getFile2.  以两个下划线开头的命名 ,如__filename3.  以两个下划线开头和结尾的命名,如 __init__()4.  其它 单下划线前缀的 ...

  2. python:类5——Python 的类的下划线命名有什么不同?

    首先是单下划线开头,这个被常用于模块中,在一个模块中以单下划线开头的变量和函数被默认当作内部函数,如果使用 from a_module import * 导入时,这部分变量和函数不会被导入.不过值得注 ...

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

    在 python 中,下划线命名规则往往令初学者相当 疑惑:单下划线.双下划线.双下划线还分前后……那它们的作用与使用场景 到底有何区别呢?今天 就来聊聊这个话题. 1.单下划线(_) 通常情况下,单 ...

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

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

  5. python中那些双下划线开头得函数和变量--转载

    Python中下划线---完全解读     Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用'from module import *'导入 __xxx__ 系统定义名字 __x ...

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

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

  7. python中那些双下划线开头得函数和变量

    Python中下划线---完全解读     Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用’from module import *’导入 __xxx__ 系统定义名字 __x ...

  8. json字符串中key值下划线命名转换为驼峰命名

    json字符串中key值下划线命名转换为驼峰命名: 例如: 原json串: String json= "{'user_name':'ok','user_sex':0,'object_info ...

  9. python中有两个下划线__的是内置方法,一个下划线_或者没有下划线的可能是属性,也可能是方法,也可能是类名

    python中有两个下划线__的是内置方法,一个下划线_或者没有下划线的可能是属性,也可能是方法,也可能是类名,如果在类中定义的就是类的私有成员. >>> dir(__builtin ...

随机推荐

  1. 软件测试之Soot

    详情请见:https://github.com/fogmisty/SoftwareTest  

  2. Python练习--普通函数与递归函数求阶乘

    '''Created on 2018年10月28日递归函数示例:阶乘'''def my_fun_example1(n):    '''    非递归函数求阶乘示例    '''    result = ...

  3. ld命令

    ld 用于把目标代码文件连接为可执行文件或者库文件 参数 -b: 指定目标代码输入文件的格式 -Bstatic: 只使用静态库 -Bdynamic: 只使用动态库 -Bsymbolic: 把引用捆绑到 ...

  4. Linux常用操作指令(面试专用)

    Linux:免费开源,多用户多任务,衍生出很多附属版本,例如常用的RedHat... 常用指令 ls        显示文件或目录 -l           列出文件详细信息l(list) -a   ...

  5. WebSphere应用程序更新方式

    在日常的使用中,一个javaee程序部署以后,以后续的使用中会有模块等的更新,但我经常见到有人直接更新服务器上的类包,文件等,(可能是tomcat,jboss这种热部署使用惯了)这样子的方式有几个问题 ...

  6. cookie,localStorage和sessionStorage的区别

    cookie已经很久没有用过了,一直觉得session Storage和local Storage更加好用一些.

  7. 使用gulp构建一个项目

    gulp是前端开发过程中自动构建项目的工具,相同作用的还有grunt.构建工具依靠插件能够自动监测文件变化以及完成js/sass/less/html/image/css/coffee等文件的语法检查. ...

  8. CCF CSP 201703-1 分蛋糕

    题目链接:http://118.190.20.162/view.page?gpid=T57   问题描述 试题编号: 201703-1 试题名称: 分蛋糕 时间限制: 1.0s 内存限制: 256.0 ...

  9. JS实现div的抖动:缓动式抖动

    代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...

  10. Angular ( 一 ) angular的安装

    1. 全局安装angular 脚手架工具 npm install -g @angular/cli 2. 打开到创建目录: 3. 创建项目 ng new my-app 4. 打开项目 5. 安装依赖 n ...