• xx: 公有变量
  • _x: 单前置下划线,保护变量,私有化属性或方法,不能用于’from module import *’ 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其/类对象本身与子类对象进行访问。是一个Python命名约定,表示这个名称是供内部使用的。 它通常不由Python解释器强制执行,仅仅作为一种对程序员的提示。
  • __xx:双前置下划线,私有成员,表示的是私有类型的变量。只能是允许这个类本身进行访问了,连子类也不可以访问;避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)。Python解释器自动在这种双下划线的私有方法或者私有属性的前面加上了 _类名 ,所以使用原定义的变量名和方法名访问不了变量和方法, 在规范上,这种双下划线的私有方法和私有属性是不应该在外部访问的; Python保留了有双前导和双末尾下划线的名称,用于特殊用途。 这样的例子有,__init__对象构造函数,或__call__ --- 它使得一个对象可以被调用,所以尽量不用这种表示方式,以免和python冲突;
  • __xx__:双前后下划线,特殊方法专用的标识,如 __init__()为代表的类构造函数等。用户名字空间的魔法对象或属性。例如:__init__ , __ 不要自己发明这样的名字
  • xx_:单后置下划线,用于避免与Python关键词的冲突;单个末尾下划线(后缀)是一个约定,用来避免与Python关键字产生命名冲突;像class或def这样的名称已经被一个关键字所占用,附加一个下划线来解决命名冲突;
  • _:某个变量是临时的或无关紧要的

1,在构造函数__init__中是_x,不是x,你直接x是访问不到的;

python中没有真正的公有和私有变量,python只是对变量名称做了一个变化,还是可以在外部访问到的,是伪私有。注:虽然私有变量可以通过_类名__变量名来访问,但强烈建议不要这样做!

2,为什么是_x 而不是x,这是python中的私有变量(虽然python中没有公有变量和私有变量,也就是说这是伪私有),在python中,如果一个变量不想被外部直接访问,一般是在变量前加一个下划线,提醒不要直接访问(其实是可以通过self._x访问到的,如果不想被访问还可以使用双下划线__x,也是不能直接访问)所以提供get_x这样的函数供使用者访问;

3,为什么要使用_x这样的伪私有变量,因为我们使用property时,让方法变成属性的方式来调用,一般是这样写x=property(...),这样调用更加清晰明了;但是如果构造函数中的变量也用x,就会和property中的变量有冲突,所有一般我们写_x

核心风格:避免用下划线作为变量名的开始。
因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,建议避免用下划线作为变量名的开始。

1.变量前置单下划线:

模块ahua有_a这个变量;

使用from ahua import * 导入ahua模块 发现_a不能被访问

使用import 导入包 可以打印_a

2.变量前双前置下划线

在类的__init__方法下定义一个__a的变量 创建a对象 发现不能打印a.__a

使用__dict__方法来查看a实例对象所拥有的属性 发现init里定义的__a变量变成了_A__a

3.变量前后各双下划线

属于类中的魔法方法 会在特定的情况下自动执行 比如

1.__new__方法会在创建实例对象时执行

2.__init__方法会在创建对象后执行

3.__str__方法会在打印对象时执行

4.变量后单下划线

用来避免与python关键词冲突

总结:

1.变量前单下划线_a 作用:使用from导入模块时,禁止导入_a变量 解决方案使用import导入

2.变量前双下划线__a作用:无法在类的外部直接访问 解决方案可以定义方法return __a 或者通过__dict__方法来查看所有属性

3.变量前后各双下划线. 类中的魔法方法 会在特定的情况下自动执行

4.变量后单下划线,用于避免与python关键词的冲突

如果是pytorch,numpy等变量名后用下划线,则表示原地的操作(inline操作)。

python变量名下划线的更多相关文章

  1. [Python Basics]下划线变量

    夜暗归云绕柁牙,江涵星影鹭眠沙. 行人怅望苏台柳,曾与吴王扫落花. 我平时很常见到的带有下划线的python变量有两种: 前后双下划线,我之前的理解是python程序中的类似meta data的信息, ...

  2. Python 变量类型

    Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据 ...

  3. [No000064]python 变量命名规范

    python源码和其他一些书籍,命名各种个性,没有一个比较统一的命名规范.于是总结了一些,供参考. 模块名: 模块应该使用尽可能短的.全小写命名,可以在模块命名时使用下划线以增强可读性.同样包的命名也 ...

  4. Python变量、数据类型6

    1.Python变量 变量,即代表某个value的名字. 变量的值存储在内存中,这意味着在创建变量时会在内存中开辟一个空间. !!!即值并没有保存在变量中,它们保存在计算机内存的深处,被变量引用.所以 ...

  5. python 变量命名规范

    python源码和其他一些书籍,命名各种个性,没有一个比较统一的命名规范.于是总结了一些,供参考. 模块名: 模块应该使用尽可能短的.全小写命名,可以在模块命名时使用下划线以增强可读性.同样包的命名也 ...

  6. Python变量类型

    Python变量类型 变量是存储在内存中的值,因此在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定的内存,并决定什么数据可以被存储在内存中. 因此变量可以指定不同的数据类型, ...

  7. python——变量

    参考资料: Python程序设计与实现 变量名的命名规则 仅仅由大.小写英文字母,下划线(_),数字(不可作为变量名的开头)组合而成: 不能使用Python关键字和函数名作为变量名: 变量名不能包含空 ...

  8. Python的下划线_

    1.单下划线(_) 通常情况下,单下划线(_)会在以下3种场景中使用: 1.1 在解释器中: 在这种情况下,"_"代表交互式解释器会话中上一条执行的语句的结果.这种用法首先被标准C ...

  9. 【python系列】--Python变量和数据类型

    python数据类型 一.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等. 计算机由于使用 ...

随机推荐

  1. vue中事件冒泡规则和事件捕获规则

    <div id="app"> <div @click="handleClickOne"> <p @click="hand ...

  2. DOS控制台

    :win+r--cmd--回车* A:d: 回车 盘符切换* B:dir(directory):列出当前目录下的文件以及文件夹* C:cd (change directory)改变指定目录(进入指定目 ...

  3. 通过面试题学JavaScript知识(1)

    // a 是多少的时候 可以让下面的打印ok if(a == 1 && a == 2 && a ==3){ console.log('ok') } 分析1: == 比较 ...

  4. webpack打包学习

    从上图我们可以看出,webpack 可以将多种静态资源 js.css.sass文件等转换成一个静态文件,以此可以减少页面的请求,从而提高浏览器响应速度 1.安装开发依赖包 npm install we ...

  5. OllyDbg---call和ret指令

    call和ret call指令 cal指令是转移到指定的子程序处,后面紧跟的操作数就是给定的地址. 例如,call 401362表示转移到地址401362处,调用401362处的子程序,当子程序调用完 ...

  6. SpringMVC的数据响应方式-页面跳转

    1.返回字符串形式 直接返回字符串:此种方式会返回字符串与视图解析器的前后缀拼接后跳转 有关视图解析器的拼接请访问此地址 注意:WEB-INF下的资源一般不能访问,因为转发是服务器的操作所以可以访问到 ...

  7. VUE(uni-app)+SSM 微信小程序

    环境 jdk:1.8.0_181 tomcat:7.0.100 mysql:8.0.25 工具 ideaIU+Hbuilder 遇到的问题 1.需要跳转到注册在tobar中页面时,需使用 uni.sw ...

  8. QT-进制转换计算器

    适合初学者练手 用QT做的一个进制转换工具,主要涉及数据类型转换.//后面再加上基本的计算. Github地址:https://github.com/wsdassssss/Calculate.git ...

  9. ElasticSearch 设置某个字段不分词

    先说结论:字段类型更改为 'keyword' elasticSearch官方文档中创建index代码如下 PUT /my_store { "mappings" : { " ...

  10. OA办公软件篇(二)—权限管理

    权限管理的背景 权限管理的作用 迭代历程 关键名词释义 权限管理模型 具体实现 写在最后   权限管理的背景 在OA办公软件篇(一)-组织架构一文中,我们说到组织架构是软件系统的权限体系的重要搭建依据 ...