首页 > 代码库 > Python _X __all__ 模拟 导入'私有'变量 及其注意点和实例
Python _X __all__ 模拟 导入'私有'变量 及其注意点和实例
开头是下划线的变量(如_X):
在特定的情况下,可以吧下划线放在变量名的签名(如_X)可以防止客户端使用from *语句导入模块名时,把其中的那些变量名复制出去;但是下划线不是‘私有‘声明:仍可以使用其他导入形式看见并且修改这类变量例如使用import
__all__(语句)
此外也可以在模块顶层把变量名的字符串列表赋值给变量__all__以达到类似_X命名惯例的隐藏效果;使用此功能,from*语句只会把列在__all__列表中的这些变量名复制出来
__all__是指出要复制的变量名,而_X时指出不要被复制的变量名;Python会先寻找模块内的__all__列表(如果定义__all__的时候,只会复制__all__内的变量名,不会复制开头没有下划线的变量名),如果没有定义的话,from * 就会复制出开头没有单下划线的所有变量名
__all__列表只对from *语句这种形式有效,并不是私有声明
例子:
#test.py
key=‘got‘
_nooutpute=‘lllllllllllllll‘
error=‘fasdfsa‘
code=‘fsadfsa‘
decode=‘324324‘
__all__=[‘error‘,‘code‘,‘decode‘]
print {‘already‘: (lambda :2+2),
‘got‘:(lambda :2*4),
‘one‘: (lambda :2**4)
}[key]()
#_X__all__.py
from test import *
print(error)
print(key)
注意点:
可以看出__all__中的必须是变量名,并且在引用之前一定要进行赋值
#test.py更改测试__all__
error=‘fasdfsa‘
code=‘fsadfsa‘
decode=‘324324‘
__all__=[‘error‘,‘code‘,‘decode‘,‘testname‘]
#_x__all__.py
from test import *
print(error)
print(testname)
Python _X __all__ 模拟 导入'私有'变量 及其注意点和实例