我的包具有以下结构:
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
__init__.py
__init__.py #1
__all__ = ['mapper', 'vehicle'] import mapper import vehicle
但是,例如应该是__init__.py #2什么样子?我的是:
__init__.py #2
__all__ = ['basemapper', 'lxml'] from basemaper import * import lxml
什么时候应该__all__使用?
__all__
__all__非常好 - 它有助于指导导入语句而无需自动导入模块 http://docs.python.org/tutorial/modules.html#importing-from-a- package
使用__all__andimport *是多余的,只__all__需要
import *
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