使用初始化py

2024-09-20 22:52:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难理解项目中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应该有自己的solrmodel.py、mongomodel.py、samodel.py的导入定义,并且它允许像这样轻松地导入类或函数:

    # file: __init__.py
    
    from mongomodel import *
    from solrmodel import *
    from samodel import *
    

    (我知道不推荐使用import *,我只是将其用作约定)

我无法在上述两种情况之间做出决定。有没有更多的__init__.py使用场景,你能解释一下吗?


Tags: 文件项目frompyimport目录目标model
2条回答

我编写的绝大多数__init__.py文件都是空的,因为许多包没有要初始化的内容。

我可能希望初始化的一个例子是,在包加载时,我希望一次性读取一堆数据(从文件、数据库或web,比方说)--在这种情况下,最好将该读取放在包的__init__.py中的私有函数中,而不是有单独的“初始化模块”并从包中的每个实际模块中冗余地导入该模块(重复性和易出错性都是无用的:这显然是一种依赖于语言保证包的__init__.py在包中的任何模块明显比Pythonic强得多之前加载一次。

对于其他具体而权威的意见表达,请查看作为Python标准库一部分的各种包中采用的不同方法。

当您在包中导入模块时,__init__.py的内容将被导入。

您忽略了第三种情况,即将公共部分放在一个单独的模块中,然后让其他模块导入该模块,而将__init__.py留给包外使用的内容。这是我通常遵循的做法。

相关问题 更多 >

    热门问题