假设您有以下内容
b
b/__init__.py
b/c
b/c/__init__.py
b/c/d
b/c/d/__init__.py
Run Code Online (Sandbox Code Playgroud)
在某些python包中,如果你import b,你只能得到b中定义的符号.要访问bc,您必须明确import b.c或from b import c.换句话说,你必须
import b
import b.c
import b.c.d
print b.c.d
Run Code Online (Sandbox Code Playgroud)
在其他情况下,我看到了所有子包的自动导入.这意味着以下代码不会产生错误
import b
print b.c.d
Run Code Online (Sandbox Code Playgroud)
因为b/__init__.py负责导入其子包.我倾向于选择第一个(显式优于隐式),而且我总是使用它,但是有没有第二个优先于第一个的情况?
我喜欢命名空间 - 所以我认为import b只应该得到b它本身的东西(大概是在b/__init__.py).如果有一个理由来隔离等功能b.c,b.c.d或什么的,那么就import b应该不会拖这一切-如果确实发生了"中拖动这一切",我认为这表明该命名空间分离可能是一个假的一个开始用.当然,甚至在标准库中都有例子(import os然后你可以使用os.path.join等等),但它们是古老的,现在基本上是"盛大"的东西,在Python包装系统成熟和稳定之前.在新代码中,我强烈建议您在导入时不要将其子包拖动.(import this在Python提示符处做,并考虑它显示的最后一行;-).
| 归档时间: |
|
| 查看次数: |
1396 次 |
| 最近记录: |