小编典典

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

all

我的包具有以下结构:

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__使用?


阅读 62

收藏
2022-06-13

共1个答案

小编典典

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

使用__all__andimport *是多余的,只__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
2022-06-13