bal*_*alu 6 python import package
正如我刚刚发现的那样import package,没有通过package.module使包的模块可用.同样明显的成立from package import subpackage以及from package import *
如果我无法访问其子模块但只能访问在其中定义的对象,那么导入包的目的是什么__init__.py呢?
对我来说这from package import *会使命名空间膨胀是有意义的,但是,在其他两种方式的情况下,它不适用!我也明白加载所有子模块可能需要很长时间.但我不知道这些不必要的副作用是什么,"这应该只在明确导入子模块时发生",这是前一个链接的作者提到的.对我而言,如果我不想访问提供的对象,那么做import package[.subpackage](或from package import subpackage)就完全没有意义__init__.py.
这些不必要的副作用真的非常严重,语言实际上必须保护程序员不会造成它们吗?实际上,我认为Python更多的是"如果程序员想要这样做,那就让他去做吧." 在我的情况下,我真的想用单个语句导入所有子模块from package import subpackage,因为我需要所有这些子模块!在__init__.py文件中告诉Python 我正在谈论的子模块(所有这些!)从我的角度来看是非常麻烦的.
请赐教.:)
是否自动导入子模块取决于包__init__.py。例如os自动导入os.path,所以这有效:
import os
print os.path.abspath('somefile')
Run Code Online (Sandbox Code Playgroud)
因此包的创建者可以决定什么是最好的。如果自动加载所有子模块将花费相当长的时间并且很少需要,那么可能不应该这样做。如果始终需要所有子模块,则可能应该自动导入它们。
如果您认为包导入不够,您可以通过编写自己的包装器模块来解决它,该模块执行所有导入,然后将其与from wrappermodule import *.