如果我创建了一个名为foo
的导入bar
的软件包,那么当我导入bar
时{0} foo
下的foo.bar
为foo
bar
在另一个模块?有没有办法防止这种情况;保持{{1}}隐藏,以免混淆命名空间?
答案 0 :(得分:3)
导入栏,无论您在何处使用它,而不是全局
如果在函数中使用bar,则导入为
def func():
import bar
....
甚至,
if __name__ == '__main__':
import bar
my_main(bar)
或者如果你喜欢class
es,
class Fubar():
def __init__(self):
import bar
self.bar = bar
答案 1 :(得分:2)
Python中的导入实际上只是名称分配的另一种形式。导入到foo的对象与在foo中定义的对象之间确实没有区别 - 它们在内部和外部都以完全相同的方式可见。所以不,没有办法阻止这种情况。
但是,我并没有真正看到这是如何混淆命名空间的。您仍然只将一个名称foo导入到其他模块中。答案 2 :(得分:0)
TL; DR:Python Imports为代码段创建命名绑定,以便引用和使用它们。
导入本质上是将一段代码绑定到名称。因此命名空间应始终反映已导入的内容。如果你隐瞒你可能最终导致其他人或你自己的意外问题。
如果您导入错误的模块,导入您不使用的模块,或者因为您在一个文件中有10个类而导致大量导入,则应考虑修复基础问题。不要试图通过搞乱模块的导入来隐藏它。