• 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. ps让图片背景透明

    效果图:  jpg=>png,背景透明 步骤: 1.选择橡皮工具的第三个  魔术橡皮 保存为png,    按住Ctrl+alt+shift+s    保存:

  2. SpringMVC 解析(四)编程式路由

    多数情况下,我们在使用Spring的Controller时,会使用@RequestMapping的形式把请求按照URL路由到指定方法上.Spring还提供了一种编程的方式去实现请求和路由方法之间的路由 ...

  3. Thread中,run方法和start方法的区别

    1. 通过调用Thread类中的start()方法可以启动一个线程,但是线程并不是立刻运行,而是处于就绪态,一旦获取cpu时间片,则会立即运行run()方法 2. start()方法实现了多线程运行, ...

  4. PyQt5 基本语法(四)

    目录 2. 输入控件(一) 2.1 纯键盘 2.1.1 QLineEdit 2.1.1.1 描述 2.1.1.2 控件创建 2.1.1.3 输出模式 2.1.1.4 提示字符串 2.1.1.5 清空按 ...

  5. FinClip 黑客马拉松正式开赛,码力集结,等你来战!

    从2017到2022,小程序已经走过了5年的光景.从无人问津到互联网巨头纷纷入局,短短数年间,小程序已然发展成为超级 App 的标配!微信.支付宝.百度.抖音.今日头条--这些超级app的背后都有巨量 ...

  6. DOM的事件传播机制

    在dom传播的过程中,一个事件有触发到响应,经历了三个过程: 1,目标的挖洞过程,先有html标签触发事件,然后向子标签一层一层传播,但未执行,,直到找到事件目标为止,这个过程叫做挖洞过程, 2,目标 ...

  7. MySQL事务提交流程详解

    MySQL事务的提交采用两阶段提交协议, 前些日子和同事聊的时候发现对提交的细节还是有些模糊,这里对照MySQL源码详细记录一下,版本是MySQL5.7.36. 一. 事务的提交流程. 1. 获取 M ...

  8. docker入门_docker安装

    docker入门_docker安装 ubuntu 安装 curl -sSL https://get.daocloud.io/docker | sh # 官方安装脚本自动安装 systemctl ena ...

  9. properties、yml配置文件映射对象

    1.properties文件内容映射到类对象(属性),如Resource目录下的1.properties文件已配置前缀为com.imooc.people相关的信息,然后: pom添加依赖:spring ...

  10. 【审视】Scrum Master的检查清单

    一般情况下,一个Scrum Master如果更多的是做组织会议.确保时间盒以及对流程中的障碍快速响应等事项的话,可以同时引导2-3个团队.在这种情况下,团队会在降低问题发生率的基础上提高一定的绩效. ...