假设您有以下内容
b
b/__init__.py
b/c
b/c/__init__.py
b/c/d
b/c/d/__init__.py
在某些 python 包中,如果你import b
,您只能得到 b 中定义的符号。要访问 b.c,您必须明确import b.c
or from b import c
。换句话说,你必须
import b
import b.c
import b.c.d
print b.c.d
在其他情况下,我看到所有子包的自动导入。这意味着以下代码不会产生错误
import b
print b.c.d
because b/__init__.py
负责导入其子包。
我倾向于更喜欢第一个(显式优于隐式),并且我总是使用它,但是是否存在第二个优于第一个的情况?
我喜欢命名空间——所以我认为import b
应该只得到里面的内容b
本身(大概在b/__init__.py
)。如果有理由隔离其他功能b.c
, b.c.d
,或者其他什么,然后就import b
不应该将其全部拖入 - 如果“将其全部拖入”确实发生,我认为这表明命名空间分离可能是一个虚假的分离。当然,即使在标准库中也有示例(import os
,那么你可以使用os.path.join
等),但它们已经很古老了,到目前为止,它们基本上是在 Python 打包系统成熟稳定之前就已经“祖父”化的东西了。在新代码中,我会strongly建议一个包应该not当您导入它时,拖动它的子包。 (做import this
在 Python 提示符下并思考它显示的最后一行;-)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)