我有一个名为core
的模块,其中包含一些python文件。每当我从该模块导入任何东西时,是否会运行__init__.py?
如果我做的:
from core.curve import Curve
是否__init__.py
被调用?我可以将适用于所有核心文件的导入语句移动到__init__.py
以节省重复的工作吗?什么应该进入__init__.py
?
我有一个名为core
的模块,其中包含一些python文件。每当我从该模块导入任何东西时,是否会运行__init__.py?
如果我做的:
from core.curve import Curve
是否__init__.py
被调用?我可以将适用于所有核心文件的导入语句移动到__init__.py
以节省重复的工作吗?什么应该进入__init__.py
?
每当我从该模块导入任何东西时,是否会运行__init__.py?
据在大多数情况下docs是,它是。
您可以添加要在目录中使用
- core
- __init__.py
在此
__init__.py
添加像
from .curve import Curve
from .some import SomethingElse
类和函数引用,并要用户类所有功能只是像
from core import Curve
我有一个名为core的模块,其中包含一些python文件。
如果它包含Python文件,它不是一个模块,它包含了Python文件的目录 - 最终包是否包含__init__.py
文件。
如果我这样做:
from core.curve import Curve
确实__init__.py
被叫?
它从来没有“调用” - 它不是一个函数 - 但它在第一次在进程中导入包或它的一个子模块时被加载。然后将其存储在sys.modules
中,随后的导入将在那里找到它。
能否将适用于所有核心文件到初始化的.py保存重复自己import语句?
没有。名称空间是每个模块,而不是每个包。无论如何,这将是一个非常糟糕的主意,在维护你的代码时,你的名字是“重复你自己”,在这种情况下,它是一个真正的帮助者(显式导入意味着你不知道哪个符号来自哪个模块)。
应该怎么办init .py?
从技术上讲,你可以在你的__init__.py
文件中放入任何你想要的东西,但大多数情况下它们都是空的。一对夫妇已知使用案例是using it as a facade为包的子模块,选择基于目前的平台或一些环境变量等通用API的具体实现...
哦,是的:这也是一个很好的地方添加一些元关于你的软件包(版本,作者等)的信息。
你在链接的文档中看到过'__init __。py'会在每个导入中加载吗? –