[英]using __init__.py
我很难理解我的项目中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
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
在包中的任何模块之前加载一次显然要更Python!)。
对于其他具体和权威的意见表达,请查看作为Python标准库一部分的各种包中采用的不同方法。
导入包中的模块时,将导入__init__.py
的内容。
你忽略了第三个场景,即将公共部分放在一个单独的模块中,然后让其他模块导入它,留下__init__.py
用于将在包外部使用的东西。 这是我经常遵循的做法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.