当前位置: 首页 > 面试题库 >

使用__init__.py

阳宗清
2023-03-14
问题内容

我在理解__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您能否解释使用情况?


问题答案:

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

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

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



 类似资料:
  • 问题内容: 我是刚开始学习Python的Java人。举个例子: 我肯定有很多冗余代码(我知道在Java中,上面的代码有很多冗余)。 对于已经从父类继承了哪些属性,哪些部分是多余的? 问题答案: 在python中为类编写函数时,应始终调用其超类的函数。我们可以使用它直接将相关属性传递给超类,因此您的代码如下所示: 正如其他人指出的那样,您可以替换该行 与 并且代码将执行相同的操作。这是因为pytho

  • init.py

  • init.py 指定导入该包时,仅导入 Client 类,代码如下: __all__ = ['Client'] from heatclient.v1.client import Client

  • 问题内容: 我正在学习Python,但无法弄清楚导入的工作方式。 我从Python教程中了解到该文件初始化了一个程序包,并且可以在此处导入子程序包。 不过,我做错了。您能为我(以及将来的Python学习者)解释我做错了什么吗? 这是我正在尝试做的一个简化示例。 这是我的文件结构: 内容: 是空的。 包含: 最后,包含: 这就是我尝试使用OSX终端和Python 3运行hello_world.py的

  • 问题内容: 我知道栈上有很多类似的问题。但是常见的答案似乎并不适合我。 我有这样的文件结构 我发现如果我在test.py中包含代码 要么 我将能够引用目录中的模块。但这没有用。 所以我尝试添加到路径,它正确添加了它: 但是即使是现在,当我尝试上述导入语句时,我仍然收到错误消息 要么 有什么明显的我想念的吗? 有没有办法检查我是否正确配置了文件,或查看我的程序包层次结构? 问题答案: 您需要更新,这

  • 问题内容: 我了解都和工作。我想知道是否有什么可以做的? 即可以使用以下模式替换: 我想问的是,我想让Python OO的这一方面更适合我。 问题答案: guido帖子中的一个可能答案(感谢@ fraca7): 例如,在pickle模块中,用于反序列化对象时创建实例。在这种情况下,将创建实例,但不会调用该方法。 还有其他类似的答案吗? 我接受这个答案是对我自己的问题的“是”: 我想知道是否有什么可