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

如何编写良好/正确的__init__.py包文件

任昊苍
2023-03-14
问题内容

我的软件包具有以下结构:

mobilescouter/
    __init__.py #1
    mapper/
        __init__.py  #2
        lxml/
            __init__.py #3
            vehiclemapper.py
            vehiclefeaturemapper.py
            vehiclefeaturesetmapper.py
        ...
        basemapper.py
   vehicle/
        __init__.py #4
        vehicle.py
        vehiclefeature.py
        vehiclefeaturemapper.py
   ...

我不确定__init__.py应如何正确写入文件。
__init__.py #1样子:

__all__ = ['mapper', 'vehicle']
import mapper
import vehicle

但是例如应该__init__.py #2看起来如何?我的是:

__all__ = ['basemapper', 'lxml']
from basemaper import *
import lxml

什么时候应该__all__使用?


问题答案:

__all__很好-它有助于指导导入语句,而无需自动导入模块
http://docs.python.org/tutorial/modules.html#importing-from-a-
package

使用__all__import *是多余的,仅__all__需要

我认为import *__init__.py导入软件包中使用的最强大的理由之一是能够重构已经成长为多个脚本的脚本,而又不会破坏现有的应用程序。但是,如果您从一开始就设计一个包装。我认为最好将__init__.py文件留空。

例如:

foo.py - contains classes related to foo such as fooFactory, tallFoo, shortFoo

然后应用程序增长,现在是整个文件夹

foo/
    __init__.py
    foofactories.py
    tallFoos.py
    shortfoos.py
    mediumfoos.py
    santaslittlehelperfoo.py
    superawsomefoo.py
    anotherfoo.py

然后初始化脚本可以说

__all__ = ['foofactories', 'tallFoos', 'shortfoos', 'medumfoos',
           'santaslittlehelperfoo', 'superawsomefoo', 'anotherfoo']
# deprecated to keep older scripts who import this from breaking
from foo.foofactories import fooFactory
from foo.tallfoos import tallFoo
from foo.shortfoos import shortFoo

因此编写的执行以下操作的脚本在更改期间不会中断:

from foo import fooFactory, tallFoo, shortFoo


 类似资料:
  • 目标 遵循类大小、方法大小和方法名称的最佳实践 了解重构的重要性 保持一致的编码风格和注释用法 使用内置记录功能 最佳编码实践 您现在已经学习了本学习路径的一半内容,已经掌握了足够多的 Java 语法来编写基本 Java 程序。在继续学习更高级的主题之前,目前是一个了解一些最佳编码实践的不错时机。阅读一些可帮助您编写更干净、更可维护的 Java 代码的必要建议。 保持类小巧 目前您已经创建了一些类

  • 问题内容: 当我在Windows上使用命令编译任意一个__init__.py文件时,它具有无法解析的外部符号错误(即“ LINK:错误LNK2001:无法解析的外部符号PyInit___init__”)。 当地环境: ctest / init.py setup.py 终端打印的信息: 问题答案: 也许此行为可能被视为-package中的一个小错误(如@DavidW所指出的,存在一个未解决的问题:h

  • 问题内容: 我正在使用Flask Framework 构建网站,其中有一个文件夹,其中有一些python文件和脚本(我想您将此文件夹称为模块吗?)。在 init .py文件中,我有一行话: 我现在想在此文件夹中的其他脚本中使用。通常,我会使用进行此操作,但这样做似乎不合适,更不用说pythonic了。此外,由于它在文件中,因此我认为应该以某种方式对整个文件夹/模块进行初始化。 有人知道如何使用该文

  • init.py

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

  • 我对编码很陌生。尝试用Java编写一个evaluatePostfix函数。我不断得到一个错误: 不兼容的类型:int不能转换为字符堆栈。push(eval(token,a,b)); 下面是我的代码块: 函数接受后缀表达式并计算结果。 这是我的eval函数: