首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

​【Python】单下划线下划线的区别

Python下划线作为前缀和后缀指定特殊变量和定义方法,主要有如下四种形式: 单下划线(_) 名称前的单下划线(如:_name) 名称前的下划线(如:__name) 名称前后的下划线(如:__init...类前面是单下划线,类名后面是下划线,然后再加上方法或者属性。但是并不建议调用,因为这是Python内部进行调用的形式。 回答完第一个问题,我们看看第二个问题,Python这样设计的目的是什么?...有很多人认为,Python下划线开头的方法和属性表示私有的方法和属性,实际上这样的理解不太准确,也不能说完全错误的。...名称前后的下划线(如:__ init __) 在Python类中,我们可以常常看到类似于“__ init ___”的方法,这表示在Python内部调用的方法,一般不建议在程序中调用。...名称前后的下划线:这类方法是Python内部定义的方法,你可以重写这些方法,这样Python就可以调用这个重写的方法以及利用操作符。

3.8K70
您找到你想要的搜索结果了吗?
是的
没有找到

python变量前的单下划线(私有变量)和下划线

1.单下划线变量前的单下划线表示表面上私有 ,但是其实这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问...2.下划线变量前的下划线表示真正的私有,实际上的私有,只有内部可以访问,外部不能访问。...3.其他(如:init):名称前后的下划线是一种惯例,对Python系统来说,这将确保不会与用户自定义的名称冲突。通常,你将会覆写这些方法,并在里面实现你所需要的功能,以便Python调用它们。...例如,当定义一个类时,你经常会覆写“init”方法总结:前面单下划线_var变量所在模块/类以外的地方也能访问该变量,但最好不要前面下划线__privateVar变量所在模块/类以外的地方不能访问该变量...,这是私有变量前后下划线如__name__和__init__Python内置特殊变量,哪儿都可以访问示例:class MyName: _name = "WinerChan111" # 伪私有变量

1.4K40

python技巧之下划线

下划线前缀的名称(例如__shahriar) 前后都带有下划线的名称(例如__init__) 5、这些命名有什么不同吗?...更多相关信息见““Importing * in Python”。 下划线前缀的名称(例如__shahriar) 以下划线做前缀的名称(特别是方法名)并不是一种惯例;它对解释器有特定含义。...前后都带有下划线的名称(例如__init__) 这些是Python的特殊方法名,这仅仅是一种惯例,一种确保Python系统中的名称不会跟用户自定义的名称发生冲突的方式。... 下划线开头的命名形式在 Python 的类成员中使用表示名字改编 (Name Mangling),即如果有一 Test 类里有一成员 __x,那么 dir(Test) 时会看到 _Test__x 而非...但要注意这要求该名称末尾没有下划线下划线开头下划线结尾的是一些 Python 的“魔术”对象,如类成员的 init、del、add、getitem 等,以及全局的 file、name 等。

10510

Python下划线的详解

本文将讨论Python下划线(_)字符的使用方法。我们将会看到,正如Python中的很多事情,下划线的不同用法大多数(并非所有)只是常用惯例而已。...正如Python文档中所述: 以下划线“_”为前缀的名称(如_spam)应该被视为API中非公开的部分(不管是函数、方法还是数据成员)。...名称前的下划线(如:__shahriar) 名称(具体为一个方法名)前下划线(__)的用法并不是一种惯例,对解释器来说它有特定的意义。Python中的这种用法是为了避免与子类定义的名称冲突。...Python文档指出,“__spam”这种形式(至少两个前导下划线,最多一个后续下划线)的任何标识符将会被“_classname__spam”这种形式原文取代,在这里“classname”是去掉前导下划线的当前类名...名称前后的下划线(如:__init__) 这种用法表示Python中特殊的方法名。其实,这只是一种惯例,对Python系统来说,这将确保不会与用户自定义的名称冲突。

50040

Python下划线---完全解读

Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用’from module import *’导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划线作为变量名的开始...因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。一般来讲,变量名_xxx被看作是“私有 的”,在模块或类外不可以使用。...“单下划线” 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量; “下划线” 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。...以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入;以下划线开头的(__foo)代表类的私有成员;以下划线开头和结尾的...__subclasshook__(C) python中以下划线的是一些系统定义得名称,让python以更优雅得语法实行一些操作,本质上还是一些函数和变量,与其他函数和变量无二。 比如x.

1.5K110

Python中的下划线

可以作为一个临时变量,用来接收各种没什么用的变量,这种用法多见于各种生成器产生数据时,有的时候生成器返回的数据我们只需要用到其中的部分变量,那么那些没有用到同时在赋值时不能缺少的变量就可以用_接收,除此以外,单下划线在...python中会默认与上一次运算过程中的非None结果保存下来(注意赋值语句相当于None,与C语言区分开),有点类似于计算器的ans功能: >>> 2+2 4 >>> a=1 >>> _ 4 >>>...xiaowang 除此以外_还用于长数字的分割,这在数字本身较长时比较常见: >>> a = 9_999_999_999 >>> a 9999999999 var_解决命名冲突问题 编程过程中如果声明的变量是python...当然,python社区并不希望我们使用from XXX import *这种通配导入的方法,因为这样的导入很容易影响到我们的命名空间(尽管去除了保护变量) 一般来说,突破保护属性的方法有两种: 一种是将保护属性加入到...当然这种改写机制也并非真正含义上的私有,python中不存在绝对私有的变量,只是通过这种改写方式告诉我们,这段程序的主人不希望我们变动私有属性的值。

42020

Python下划线的作用

单前导下划线 _var是一个Python命名约定,表示这个名称是供内部使用的。 它通常不由Python解释器强制执行,仅仅作为一种对程序员的提示。2....单末尾下划线 var_单个末尾下划线(后缀)是一个约定,用来避免与Python关键字产生命名冲突;像class或def这样的名称已经被一个关键字所占用,附加一个下划线来解决命名冲突。3....前导下划线 __varPython解释器自动在这种下划线的私有方法或者私有属性的前面加上了 _类名 ,所以使用原定义的变量名和方法名访问不了变量和方法, 在规范上,这种下划线的私有方法和私有属性是不应该在外部访问的...前导和末尾下划线 _var_Python保留了有前导和末尾下划线的名称,用于特殊用途。...这样的例子有,__init__对象构造函数,或__call__ --- 它使得一个对象可以被调用,所以尽量不用这种表示方式,以免和python冲突。5.单下划线 _某个变量是临时的或无关紧要的。

60310

关于Python的前后、单下划线作用,看完这篇文章,吊打面试官!

来源:清风python python的各种下划线Python中,可能最常见的就是各种常量、变量、函数、方法前后添加的那些下划线了。有前面加的、后面加的,加一个的,加两个的,看到头晕。...前导和末尾下划线 日常开发中,最好避免在自己的程序中使用以下划线(“dunders”)开头和结尾的名称,因为它是Python语言定义的一种特殊方法(魔法方法),我们熟知的__init__ 、__dict...前导下划线 这个为什么放在最后,因为压轴啊!前导下划线,在面试中被考到的几率太大了,尤其是那种长相猥琐,心术不正的面试官,最爱问这个知识点,所以要牢记。...刚才我们说到了,前导下划线是真切的私有变量、方法,无法被子类所继承。如果我们把前导下划线,变成了单前导下划线(如Test3),那么结果是root。..._Demo__say_hello() 我们定义一个Demo类,其中存在前导下划线的__name __say_hello,当我们使用通常的调用方式时,是无法执行的,但Python的私有属性声明时,其实就是将某个私有属性前添加单下划线

2.8K10

Python下划线的 6 个作用

初学者看到 Python 中的下划线 _ 时可能会有些懵圈,不知道这个到底是干什么用的,今天就来盘点一下 Python 中的下划线有哪些用处。以后看到下划线时就可以对号入座了。...1、用在 Python 解释器,表示上一次的执行结果 即使不把 Python 用于编程,也可以把它用作智能计算器,下划线保存上次的计算结果,在计算时相当方便: >>> 4 + 3 7 >>> _ 7 >...3、类的内部,下划线作为变量名或函数名的开头,表示私有 私有变量或函数,只能在类的内部来使用,不可在外部访问或更改,比如,在 module_b.py 中有一个类 A,类 A 有一个下划线开头的变量名...Python 本身没有任何机制阻止你干坏事,一切全靠自觉 4、下划线开头和结尾的方法,是魔术方法 比如常见的 '**init', '__dict**', 'dir__', '**doc', '__eq...6、作为数字中间的一部分,更易读 >>> 10_000_000 10000000 >>> 1_280_500_000 == 1280500000 True 最后的话 本文梳理了下划线Python 中的

33930

一日一技:在Python下划线私有方法不能被调用的原理

这是因为,在Python里面,类方法或者属性如果以下划线开头,那么他们就是类的私有方法,在被继承的时候,即使子类有相同名字的以下划线开头的属性或者方法也不会覆盖父类。...而且这些以下划线开头的私有方法或者属性,在类内部可以自由被其他方法调用,但是在实例对象里面是不能直接调用的,如下图所示: 那么Python是如何实现这一点的呢?...实际上Python仅仅是改了一个名字而已。...Python仅仅是改了一个名字,在这种下划线的私有方法或者私有属性的前面加上了 _类名,这样就确保了子类和父类的方法名不一致。...所以,虽然 在规范上,这种下划线的私有方法和私有属性是不应该在外部访问的,但是如果你想强行访问,可以个使用这种改名以后的名字: kingname = PeopleInfo() kingname.

1.6K30

Python下划线的5种含义

来源:Python程序员 ID:pythonbuluo 本文介绍了Python中单下划线下划线("dunder")的各种含义和命名约定,名称修饰(name mangling)的工作原理,以及它如何影响你自己的...单下划线下划线Python变量和方法名称中都各有其含义。有一些含义仅仅是依照约定,被视作是对程序员的提示 - 而有一些含义是由Python解释器严格执行的。...如果你想知道“Python变量和方法名称中单下划线下划线的含义是什么?”,我会尽我所能在这里为你解答。...在本文中,我将讨论以下五种下划线模式和命名约定,以及它们如何影响Python程序的行为: 单前导下划线:_var 单末尾下划线:var_ 前导下划线:__var 前导和末尾下划线:__var__ 单下划线...前导下划线 __var 到目前为止,我们所涉及的所有命名模式的含义,来自于已达成共识的约定。 而对于以下划线开头的Python类的属性(包括变量和方法),情况就有点不同了。

1.5K70
领券