将单个文件模块中的导入模块或导入方法设为私有

时间:2018-04-05 13:34:06

标签: python

当我有单个文件模块依赖于第三方模块或方法导入单个文件模块中的第三方模块时,我可以在导入单个文件模块时访问第三方模块或方法。我想防止这种情况,我的建议是导入第三方模块或方法,并在前面用下划线重命名它们。这是一个好主意,我还有其他选择。

示例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

1 个答案:

答案 0 :(得分:3)

首先是通常的免责声明:Python没有强制执行的概念"隐私" - 单一的主要下划线只是一个命名惯例,说'#34;让我们假装你不知道这个存在" (我假设你已经知道这一点,但最好从一开始就明白这一点。)

规范的答案是:使用您要公开公开的名称定义模块的__all__属性 - 然后模块中的每个其他名称都应被用户视为"私有" 。你可以用单引导下划线(import foo as _foo)加倍,如果你真的想明确这一点,但这可能有点过头了。