加下划线的变量
Python
某些标识符类(除了关键字)具有特殊含义。这些类的命名模式以下划线字符开头,并以下划线结尾:
1 语法解读
1.1 _*
_*
,表示不会被 from module import *
所导入。
1.2 _
- *
_
在 match 语句内部的case
模式中,_
是一个软关键字
,它表示通配符。 - 在此之外,交互式解释器会将最后一次求值的结果放到变量
_
中。 (它与 print 等内置函数一起被存储于 builtins 模块。) - 在其他地方,
_
是一个常规标识符。 它常常被用来命名 “特殊” 条目,但对 Python 本身来说毫无特殊之处。开发人员常用下划线表示改变私有变量,不希望被外部直接访问的变量,但是从语法上,这种加了一个下划线的变量依旧是可以从外部访问的,是一种伪私有变量。 - 它还经常被用来命名无需使用的变量。
1.3 __*__
若变量名称前后都有双下划线,则表示系统定义的名称,通常简称为 “dunder” 。这些名称由解释器及其实现(包括标准库)定义,并全局可用。
部分内置变量如下:
属性 | 含意 |
---|---|
__doc__ |
该函数的文档字符串,没有则为 None ;不会被子类继承。 |
__name__ |
该函数的名称。 |
__qualname__ |
该函数的 qualified name。 |
__module__ |
该函数所属模块的名称,没有则为 None 。 |
__defaults__ |
由具有默认值的参数的默认参数值组成的元组,如无任何参数具有默认值则为 None 。 |
__code__ |
表示编译后的函数体的代码对象。 |
__globals__ |
对存放该函数中全局变量的字典的引用 |
__dict__ |
命名空间支持的函数属性。 |
__closure__ |
None 或包含该函数可用变量的绑定的单元的元组 |
__annotations__ |
包含形参标注的字典。 |
__kwdefaults__ |
仅包含关键字参数默认值的字典。 |
___self__ |
为类实例对象本身 |
__func__ |
为函数对象 |
1.4 __*
在类中,使用前双下划线表示类的私有名称。类定义时,此类名称以一种混合形式重写,以避免基类及派生类的 “私有” 属性之间产生名称冲突。私有变量不能在外部访问。
2 案例
class MyName:
= "WinerChan111" # 伪私有变量
_name = "WinerChan222" # 私有变量
__namedede
self):
def get_namedede(self.__namedede
return
self,s):
def set_namedede(= s
self.__namedede
print(MyName._name)
print(MyName.__namedede)
#############输出#######################
>>>
>>> class MyName:
= "w1"
... _name = "w2"
... __namedede
... >>> print(MyName._name)
w1>>> print(MyName.__namedede)
Traceback (most recent call last):"<stdin>", line 1, in <module>
File AttributeError: type object 'MyName' has no attribute '__namedede'
>>>