我正在努力解决嵌套问题__init__.py
在我正在编写的Python包中。该包具有以下架构:
module/
├── __init__.py
├── submodule1
│ ├── __init__.py
│ └── source.py
└── submodule2
├── __init__.py
├── source.py
└── subsubmodule2
├── __init__.py
└── source.py
我的目的是能够访问中定义的函数submodule2/source.py
通过module.submodule2.function
and in subsubmodules2/source.py
通过module.submodule2.subsubmodule2.function
.
我尝试的第一件事是定义__init__.py
in submodule2
这边走:
from .subsubmodule2 import *
但这样做,我得到了定义的函数subsubmodules2/source.py
通过module.submodule2.function
(and module.function
).
If I do:
from . import subsubmodule2
我通过以下方式获得这些功能module.subsubmodule2.function
.
我也尝试定义__all__
关键字在__init__
,没有再成功。如果我理解得好的话Python 文档 https://docs.python.org/3/tutorial/modules.html,我想我可以留空__init__.py
文件,它可以工作,但根据我的理解,这也不是最佳实践。
按照我的模块的预期访问这些功能的最佳方式是什么?
in module
__init__.py
文件写入您要导入的模块
from . import submodule1
from . import submodule2
__all__ = ['submodule1', 'submodule2']
现在,在子模块1中__init__.py
文件写入
from . import source
from . import subsubmodule
# if you want to import functions from source then import them or in source.py
# define __all__ and add function which you want to expose
__all__ = ['source', 'subsubmodule']
现在在子子模块中__init__
文件定义要公开的函数或类
from . source import *
__all__ = ['source']
# if you want to use * as import, i suggest you to use __all__ in source.py and mention all exposed function there
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)