您的位置:首页 > 编程语言 > Python开发

Python _X __all__ 模拟 导入'私有'变量 及其注意点和实例

2014-12-13 12:24 393 查看

开头是下划线的变量(如_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)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐