MBR*_*MBR 6 python python-module python-3.x
我正在努力解决嵌套__init__.py在我正在编写的Python包中的问题。该包具有以下架构:
module/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 submodule1\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 source.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 submodule2\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 source.py\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 subsubmodule2\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 source.py\nRun Code Online (Sandbox Code Playgroud)\n我的目的是能够访问submodule2/source.pythroughmodule.submodule2.function和 in subsubmodules2/source.pythrough中定义的函数module.submodule2.subsubmodule2.function。
我尝试的第一件事就是__init__.py这样定义submodule2:
from .subsubmodule2 import *\nRun Code Online (Sandbox Code Playgroud)\nsubsubmodules2/source.py但这样做,我得到了through module.submodule2.function(and )中定义的函数module.function。
如果我做:
\nfrom . import subsubmodule2\nRun Code Online (Sandbox Code Playgroud)\n我通过module.subsubmodule2.function.
我还尝试__all__在 中定义关键字__init__,但没有成功。如果我很好地理解Python 文档,我想我可以保留空__init__.py文件并且它可以工作,但根据我的理解,这也不是最佳实践。
按照我的模块的预期访问这些功能的最佳方式是什么?
\n在module __init__.py文件中写入您要导入的模块
from . import submodule1
from . import submodule2
__all__ = ['submodule1', 'submodule2']
Run Code Online (Sandbox Code Playgroud)
现在,在 submodule1__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']
Run Code Online (Sandbox Code Playgroud)
现在在子子模块__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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3715 次 |
| 最近记录: |