gpt4 book ai didi

python - 将单个文件模块中的导入模块或导入方法设为私有(private)

转载 作者:太空宇宙 更新时间:2023-11-04 00:19:41 24 4
gpt4 key购买 nike

当我有一个依赖第 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)将其加倍,如果你真的想表达清楚,但这可能有点过头了。

关于python - 将单个文件模块中的导入模块或导入方法设为私有(private),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49673723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com