假设我在模块a.py
中有这样的代码
import numpy as np
def sqrt(x):
return np.sqrt(x)
我有一个写成这样的模块b.py
:
import a
print(a.sqrt(25))
print(a.np.sqrt(25))
我将看到代码运行良好,并且在大多数IDE中使用自动完成功能时,我发现a.np
是可访问的。我想将a.np
设为私有,以便只有a
代码可以看到该变量。
我不希望b
能够访问a.np
。
什么是使之成为可能的好方法?
为什么我想a.np
无法访问?因为我希望在Jupyter Lab中键入a.
并按 Tab 时,它不会显示在自动完成中。它隐藏了模块可以做什么,因为我在模块中使用了很多导入。
答案 0 :(得分:2)
解决方案与类中“受保护”属性/方法的解决方案相同(模块中定义的名称实际上是-在运行时-模块对象的属性):在这些名称前加一个下划线,即>
import numpy as _np
def sqrt(x):
return _np.sqrt(x)
请注意,这不会阻止某人使用a._np.sqrt(x)
,但至少可以很清楚地表明他正在使用受保护的属性。
答案 1 :(得分:0)
我在这里看到2种方法:
更人性化的解决方案:将别名更改为“带下划线”
import numpy as _np
...
这不会阻止导入它,但会告诉用户这是实现细节,不应依赖它们。
我最喜欢的解决方案:什么也不做,保持原样,相应地使用semver和凹凸版本。