我的包具有以下结构:
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
...
Run Code Online (Sandbox Code Playgroud)
我不确定__init__.py文件应该如何正确编写.
的__init__.py #1样子:
__all__ = ['mapper', 'vehicle']
import mapper
import vehicle
Run Code Online (Sandbox Code Playgroud)
但是应该__init__.py #2怎么样?我的是:
__all__ = ['basemapper', 'lxml']
from basemaper import *
import lxml
Run Code Online (Sandbox Code Playgroud)
什么时候应该__all__使用?
Fir*_*row 141
__all__非常好 - 它有助于指导import语句而无需自动导入模块
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
Run Code Online (Sandbox Code Playgroud)
然后应用程序增长,现在它是一个完整的文件夹
foo/
__init__.py
foofactories.py
tallFoos.py
shortfoos.py
mediumfoos.py
santaslittlehelperfoo.py
superawsomefoo.py
anotherfoo.py
Run Code Online (Sandbox Code Playgroud)
那么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
Run Code Online (Sandbox Code Playgroud)
以便在更改期间写入以执行以下操作的脚本不会中断:
from foo import fooFactory, tallFoo, shortFoo
Run Code Online (Sandbox Code Playgroud)
Ale*_*lli 109
我自己的__init__.py文件经常是空的.特别是,我从来没有from blah import *作为一部分__init__.py- 如果"导入包"意味着获得所有类,函数等直接定义为包的一部分,那么我将词汇复制blah.py到包的内容__init__.py而不是删除blah.py(源文件的乘法在这里没有好处).
如果你坚持支持import *成语(eek),那么使用__all__(尽可能微小的名字列表,你可以带来它)可能有助于控制伤害.一般来说,命名空间和显式导入是好事,我强烈建议重新考虑基于系统地绕过其中一个或两个概念的任何方法! - )
你__init__.py应该有一个文档字符串。
尽管所有功能都是在模块和子包中实现的,但包文档字符串是记录从哪里开始的地方。例如,考虑pythonemail包。包文档是描述目的、背景以及包中的各个组件如何协同工作的简介。如果您使用 sphinx 或其他包自动从文档字符串生成文档,则包文档字符串正是描述此类介绍的正确位置。
对于任何其他内容,请参阅firecrow和Alex Martelli的精彩回答。
| 归档时间: |
|
| 查看次数: |
128055 次 |
| 最近记录: |