使用__init__.py

发布于 2021-01-29 18:17:45

我在理解__init__.py项目中python文件的使用场景或设计目标时遇到了困难。

假设我有“模型”目录(称为包),其中包含以下文件

  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应当具有自己导入的solrmodel.py,mongomodel.py,samodel.py的定义,并且它允许像这样的类或函数的轻松导入:

    # file: __init__.py
    

    from mongomodel import * from solrmodel import * from samodel import *

(我知道import *不建议这样做,我只是将其用作惯例)

我无法在以上两种情况之间做出选择。是否有更多使用场景,__init__.py您能否解释使用情况?

关注者
0
被浏览
212
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    __init__.py我写的绝大多数文件都是空的,因为许多软件包没有任何要初始化的东西。

    我可能要初始化的一个例子是,在程序包加载时,我要一次一劳永逸地读取一堆数据(比如从文件,数据库或网络),在这种情况下,它
    好得多将读取的内容放在包的私有函数中,__init__.py而不要使用单独的“初始化模块”,并从包中的每个真实模块中冗余导入该模块(无用的重复和容易出错的情况:这显然是依赖于语言的保证包的__init__.py
    在包中的任何模块之前加载一次显然要更Python!)。

    对于其他具体而权威的观点表达,请查看Python标准库中各种程序包中采用的不同方法。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看