使用__init__.py
我很难理解python的__init__.py
文件在我的项目中的使用场景或devise目标。
假设我有'模型'目录(引用为一个包),其中包含以下文件
-
__init__.py
-
meta.py
-
solrmodel.py
-
mongomodel.py
-
samodel.py
我find了两种使用__init__.py
:
-
我有一个共同的定义,需要在
solrmodel.py
,mongomodel.py
,samodel.py
。 我可以使用__init__.py
作为所有* model.py类的基本/通用定义吗? 这意味着我必须导入model/__init__.py
。 -
或者,
__init__.py
init__.py应该自己导入solrmodel.py,mongomodel.py,samodel.py的定义,并且允许像这样轻松导入类或函数:# file: __init__.py from mongomodel import * from solrmodel import * from samodel import *
(我知道,不推荐
import *
,我只是用它作为约定)
我无法决定以上两种情况。 __init__.py
有更多的使用场景,你能解释一下使用情况吗?
我写的绝大多数__init__.py
文件都是空的,因为许多软件包没有任何东西可以初始化。
我可能想要初始化的一个例子是,在包加载的时候,我想一次性读取大量数据(从文件,数据库或者网页中读取) – 在这种情况下,把这个阅读放在包的__init__.py
中的一个私有函数中,而不是有一个单独的“初始化模块”,并且从包中的每一个真实模块中冗余地导入该模块(无用的重复和容易出错:显然是依赖在语言的保证,该包的__init__.py
被加载一次之前在包中的任何模块明显更Pythonic!)。
对于其他具体和权威的意见expression,请看作为Python标准库一部分的各种包中采用的不同方法。
在包中导入模块时会导入__init__.py
的内容。
你忽略了第三个场景,就是将公共部分放在一个单独的模块中,然后让其他模块导入这个模块,将__init__.py
留给将在包外部使用的东西。 这是我通常遵循的做法。