当我有单个文件模块依赖于第三方模块或方法导入单个文件模块中的第三方模块时,我可以在导入单个文件模块时访问第三方模块或方法。我想防止这种情况,我的建议是导入第三方模块或方法,并在前面用下划线重命名它们。这是一个好主意,我还有其他选择。
示例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
答案 0 :(得分:3)
首先是通常的免责声明:Python没有强制执行的概念"隐私" - 单一的主要下划线只是一个命名惯例,说'#34;让我们假装你不知道这个存在" (我假设你已经知道这一点,但最好从一开始就明白这一点。)
规范的答案是:使用您要公开公开的名称定义模块的__all__
属性 - 然后模块中的每个其他名称都应被用户视为"私有" 。你可以用单引导下划线(import foo as _foo
)加倍,如果你真的想明确这一点,但这可能有点过头了。