含下划线_变量名的涵义

_XXX

一般来讲,变量名_xxx被看作是“私有的”,在模块或类外不可以使用。
保护变量,意思是只有类对象和自类对象自己能访问到这些变量。

例:以单下划线开头(_foo)变量需通过类提供的接口进行访问,不能用“from xxx import *”而导入。

class Test:
def __init__(self):
    
    self._foo = 23

t = Test()
# 依然可以进入类并访问该变量
t._foo
output: 23
# my_module.py:
 
def external_func():
   return 23
 
def _internal_func():
   return 42
# main.py
# 通配符导入
from my_module import *
external_func()
_internal_func()

output:
23
NameError: "name '_internal_func' is not defined"

常规导入

>>> import my_module
>>> my_module.external_func()
23
>>> my_module._internal_func()
42

XXX_

当一个变量的最合适的名称已经被一个关键字所占用。因此,像class或def这样的名称不能用作Python中的变量名称。在这种情况下,可附加一个下划线来解决命名冲突:

>>> def make_object(name, class):
SyntaxError: "invalid syntax"
>>> def make_object(name, class_):
...    pass

双前导和双末尾下划线 XXX

由双下划线前缀和后缀包围的变量不会被Python解释器修改

posted @ 2022-03-23 22:17  ArdenWang  阅读(52)  评论(0编辑  收藏  举报