当我有一个依赖第 3 方模块的单文件模块或导入到单文件模块中的第 3 方模块的方法时,我可以在导入单文件模块时访问第 3 方模块或方法.我想防止这种情况发生,我的建议是导入第 3 方模块或方法,并在前面加上下划线重命名它们。这是个好主意吗?我还有哪些其他选择。
示例 1:
# this is a single file module called DemoModule.py
import numpy as np
def calculate_something():
x = np.cos(0)
return x
现在,当我导入 DemoModule 时,我不仅可以访问 calculate_something
,而且还可以访问 numpy 必须提供的所有内容。这是避免这种情况的好方法吗:
# this is a single file module called DemoModule.py
import numpy as _np
def calculate_something():
x = _np.cos(0)
return x
示例 2:
# this is a single file module called DemoModule.py
from numpy import cos
def calculate_something():
x = cos(0)
return x
现在,当我导入 DemoModule 时,我不仅可以访问 calculate_something,还可以访问 cos
。这是避免这种情况的好方法吗:
# this is a single file module called DemoModule.py
from numpy import cos as _cos
def calculate_something():
x = _cos(0)
return x
编辑:
命令行运行
In[2]: import DemoModule
In[3]: DemoModule.np.cos(1)
Out[3]: 0.54030230586813977
首先是通常的免责声明:Python 没有强制“隐私”的概念——单个前导下划线只是一种命名约定,表示“让我们假装你不知道它存在”(我假设你已经知道了,但最好让事情从一开始就很清楚)。
规范的答案是:使用您想要公开的名称定义模块的 __all__
属性 - 模块中的每个其他名称都应被用户视为“私有(private)”。 可以用单前导下划线(import foo as _foo
)将其加倍,如果你真的想表达清楚,但这可能有点过头了。
我是一名优秀的程序员,十分优秀!