我很难理解项目中python __init__.py
文件的使用场景或设计目标。
假设我有“model”目录(称为包),其中包含以下文件
__init__.py
meta.py
solrmodel.py
mongomodel.py
samodel.py
我发现了两种使用__init__.py
的方法:
我有一个通用的定义,需要在solrmodel.py
,mongomodel.py
,samodel.py
中使用。我可以使用__init__.py
作为所有*model.py类的基本/通用定义吗?这意味着我必须导入model/__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
文件都是空的,因为许多包没有要初始化的内容。我可能希望初始化的一个例子是,在包加载时,我希望一次性读取一堆数据(从文件、数据库或web,比方说)--在这种情况下,最好将该读取放在包的
__init__.py
中的私有函数中,而不是有单独的“初始化模块”并从包中的每个实际模块中冗余地导入该模块(重复性和易出错性都是无用的:这显然是一种依赖于语言保证包的__init__.py
在包中的任何模块明显比Pythonic强得多之前加载一次。对于其他具体而权威的意见表达,请查看作为Python标准库一部分的各种包中采用的不同方法。
当您在包中导入模块时,
__init__.py
的内容将被导入。您忽略了第三种情况,即将公共部分放在一个单独的模块中,然后让其他模块导入该模块,而将
__init__.py
留给包外使用的内容。这是我通常遵循的做法。相关问题 更多 >
编程相关推荐