How do I write good/correct package __init__.py files(如何编写好的/正确的包 __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
看起来像:
I'm not sure how the __init__.py
files should be correctly written.
The __init__.py #1
looks like:
__all__ = ['mapper', 'vehicle']
import mapper
import vehicle
但是例如 __init__.py #2
应该是什么样子?我的是:
But how should for example __init__.py #2
look like? Mine is:
__all__ = ['basemapper', 'lxml']
from basemaper import *
import lxml
什么时候应该使用 __all__
?
推荐答案
__all__
非常好 - 它有助于指导导入语句而不自动导入模块http://docs.python.org/tutorial/modules.html#importing-from-a-package
__all__
is very good - it helps guide import statements without automatically importing modules
http://docs.python.org/tutorial/modules.html#importing-from-a-package
使用 __all__
和 import *
是多余的,只需要 __all__
using __all__
and import *
is redundant, only __all__
is needed
我认为在 __init__.py
中使用 import *
来导入包的最有力的原因之一是能够重构已经成长为多个的脚本在不破坏现有应用程序的情况下编写脚本.但是如果你从一开始就设计一个包.我认为最好将 __init__.py
文件留空.
I think one of the most powerful reasons to use import *
in an __init__.py
to import packages is to be able to refactor a script that has grown into multiple scripts without breaking an existing application. But if you're designing a package from the start. I think it's best to leave __init__.py
files empty.
例如:
foo.py - contains classes related to foo such as fooFactory, tallFoo, shortFoo
然后应用程序增长,现在它是一个完整的文件夹
then the app grows and now it's a whole folder
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
以便为执行以下操作而编写的脚本在更改期间不会中断:
so that a script written to do the following does not break during the change:
from foo import fooFactory, tallFoo, shortFoo
这篇关于如何编写好的/正确的包 __init__.py 文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何编写好的/正确的包 __init__.py 文件


基础教程推荐
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- 筛选NumPy数组 2022-01-01