每次我从该模块导入任何内容时都会运行 __init__.py 吗? [复制]

2024-04-21

我有一个名为core,其中包含许多 python 文件。

If I do:

from core.curve import Curve

Does __init__.py接到电话吗?我可以将适用于所有核心文件的导入语句移至__init__.py为了避免重复自己?什么should进入__init__.py?


我有一个名为 core 的模块,其中包含许多 python 文件。

如果它包含 python 文件,那么它不是一个模块,它是一个包含 python 文件的目录 - 如果它包含一个包,那么它最终是一个包__init__.py file.

如果我这样做:from core.curve import Curve does __init__.py接到电话吗?

它永远不会被“调用” - 它不是一个函数 - 但它会在第一次在进程中导入包或其子模块时加载。然后它被存储在sys.modules后续导入会在那里找到它。

我可以将适用于所有核心文件的导入语句移至init.py 来避免重复自己?

没有。命名空间是每个模块的,而不是每个包的。无论如何,这将是一个非常糟糕的主意,在这种情况下,您所说的“重复自己”是维护代码时的真正帮手(显式导入意味着您毫不含糊地知道哪个符号来自哪个模块)。

应该写什么init.py?

从技术上讲,你实际上可以将任何你想要的东西放入你的__init__.py文件,但大多数情况下它们只是空的。几个已知的用例是用它作为门面 https://en.wikipedia.org/wiki/Facade_pattern对于包的子模块,根据当前平台或某些环境变量等选择通用 API 的具体实现...

哦,是的:它也是添加一些有关包的元信息(版本、作者等)的好地方。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每次我从该模块导入任何内容时都会运行 __init__.py 吗? [复制] 的相关文章

随机推荐