繁体   English   中英

使用__init__.py

[英]using __init__.py

我很难理解我的项目中python的__init__.py文件的使用场景或设计目标。

假设我有'model'目录(引用为包),其中包含以下文件

  1. __init__.py
  2. meta.py
  3. solrmodel.py
  4. mongomodel.py
  5. samodel.py

我找到了两种使用__init__.py

  1. 我有一个共同的定义,需要在solrmodel.pymongomodel.pysamodel.py 我可以使用__init__.py作为所有* model.py类的基本/公共定义吗? 这意味着我必须导入model/__init__.py

  2. 或者, __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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM