是否自导入分包?

2024-02-13

假设您有以下内容

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(使用前将#替换为@)

是否自导入分包? 的相关文章

随机推荐