自包含或不包含子包?
问题描述:
假设你有以下自包含或不包含子包?
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
或from b import c
。换句话说,你必须
import b
import b.c
import b.c.d
print b.c.d
在其他情况下,我看到一个自动导入所有的子包。这意味着下面的代码不会产生错误
import b
print b.c.d
因为b/__init__.py
需要进口及其子包的护理。 我倾向于喜欢第一个(明确优于隐含),我总是使用它,但是有没有第二个优先于第一个的情况?
答
我喜欢命名空间 - 所以我认为import b
应该只能得到b
本身(推测在b/__init__.py
)。如果有理由将b.c
,b.c.d
或其他功能中的其他功能分开,那么只需import b
不应该将其全部拖入 - 如果“全部拖入”确实发生,我认为这表明名称空间分离可能是假的一开始。当然,甚至在标准库中也有例子(import os
,然后你可以使用os.path.join
之类),但它们是古老的,到现在为止,在Python封装系统成熟和稳定之前,这些东西基本上是“祖先的”东西。在新的代码中,我会强烈建议一个包应该而不是当你导入它的时候拖动它的子包。 (在Python提示符下执行import this
并考虑它显示的最后一行;-)。
答
__all__
= [您的增值经销商,函数,类]
使用在程序包B的__init__.py
在字典上市的汽车负载的东西上面的语法。 :)