通过导入包含包层次结构
Include package hierarchy with import
我是 Python 的新手,尤其是 Python 中的结构代码新手。我有一个简单的问题,但我不确定如何措辞。我正在寻找一个导入模块的命令,同时将其包层次结构作为其 namespace/scope 的一部分包含在内。这可能吗?。这里有一个简单的项目提供示例:
game (__init__.py)
gameplay.py
ui/
window.py
panel.py
data.py
我相信我可以使用绝对语法将 ui/data.py
之类的模块导入 gameplay.py
,例如:
import game.ui.data.py
但我认为这需要从一开始就深入挖掘层次结构(项目名称),而不管模块是在哪里导入的,或者活动模块与导入模块的关系如何。示例:control = game.ui.data.controller
.
我唯一熟悉的其他类型的导入是相对导入:
from . ui import data.py
这似乎转储了模块的所有父包装,像活动模块 (control = data.controller
) 的子模块一样导入模块。
所以这是我希望在几种情况下做的(无效的)示例:
from game import ui.data
control = ui.data.controller
在测试了一些东西之后,我发现我可以编写一个包初始化文件 (ui\__init__.py
) 来导入它自己的所有文件,然后直接导入该包名称 (from . import ui
)到其他文件中。结果与我想要的类似,但我觉得这可能是一种糟糕的方法。
有什么好的方法吗?
你的第二种方法很好。
绝对方法是保持一切完好无损的好方法,但我个人更喜欢做相对方法(以防将来设计更改)。
最好在每个 python 包中写一个 __init__.py
(python3+ import it without even a init file) ,在这个 init frile 你可以写 tge 函数你想使用 __all__
.
暴露在外部 python 环境中
也不要使用 from game import ui.data
使用 from game.ui import data
如果这里的数据是唯一的,否则做 from game import ui
然后做一个 uidata=ui.data(*args,**kwargs)
或 from game.ui import data as ui_data
(改进建议通过@smitelli)
更多项目结构请阅读PEP-8 guidelines
我是 Python 的新手,尤其是 Python 中的结构代码新手。我有一个简单的问题,但我不确定如何措辞。我正在寻找一个导入模块的命令,同时将其包层次结构作为其 namespace/scope 的一部分包含在内。这可能吗?。这里有一个简单的项目提供示例:
game (__init__.py)
gameplay.py
ui/
window.py
panel.py
data.py
我相信我可以使用绝对语法将 ui/data.py
之类的模块导入 gameplay.py
,例如:
import game.ui.data.py
但我认为这需要从一开始就深入挖掘层次结构(项目名称),而不管模块是在哪里导入的,或者活动模块与导入模块的关系如何。示例:control = game.ui.data.controller
.
我唯一熟悉的其他类型的导入是相对导入:
from . ui import data.py
这似乎转储了模块的所有父包装,像活动模块 (control = data.controller
) 的子模块一样导入模块。
所以这是我希望在几种情况下做的(无效的)示例:
from game import ui.data
control = ui.data.controller
在测试了一些东西之后,我发现我可以编写一个包初始化文件 (ui\__init__.py
) 来导入它自己的所有文件,然后直接导入该包名称 (from . import ui
)到其他文件中。结果与我想要的类似,但我觉得这可能是一种糟糕的方法。
有什么好的方法吗?
你的第二种方法很好。
绝对方法是保持一切完好无损的好方法,但我个人更喜欢做相对方法(以防将来设计更改)。
最好在每个 python 包中写一个 __init__.py
(python3+ import it without even a init file) ,在这个 init frile 你可以写 tge 函数你想使用 __all__
.
也不要使用 from game import ui.data
使用 from game.ui import data
如果这里的数据是唯一的,否则做 from game import ui
然后做一个 uidata=ui.data(*args,**kwargs)
或 from game.ui import data as ui_data
(改进建议通过@smitelli)
更多项目结构请阅读PEP-8 guidelines