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

问题:

我的包装具有以下结构:

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__
我认为在__init__.py中使用import *导入包的最强大的原因之一是能够将已经发展成多个脚本的脚本重构,而不会破坏现有的应用程序。但是如果你从一开始就设计一个包。我认为最好将__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

那么init脚本可以说

__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

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How do I write good/correct package __init__.py files

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 2 = 8