假设我有一个这样的模块:module├── __init__.py└── submodule ├── B.py ├── __init__.py └── subsubmodule ├── A.py └── __init__.py具有以下文件内容:module/submodule/subsubmodule/A.py class A: passmodule/submodule/subsubmodule/__init__.py from .A import Amodule/submodule/__init__.py from .subsubmodule import A from .B import Bmodule/submodule/B.py class B: passmodule/__init__.py from .submodule import A, B当我导入模块时,我希望类A和B立即在顶层可用。按照我设置的方式,效果很好。但我最终还是submodule在module. 为什么?这是可以还是有问题?对我来说它看起来不干净。我可以避免这种情况吗?In [1]: import moduleIn [2]: dir(module)Out[2]: ['A', 'B', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'submodule'] # <------------ why is that here? 我说from .submodule import A, B在__init__.py的module。我从来没有说过from . import submodule。所以中间模块显然被拖到了命名空间中。是否应该避免这种情况,如果是的话如何避免。
1 回答
临摹微笑
TA贡献1982条经验 获得超2个赞
我在模块的init.py中说了from .submodule import A, B。我从来没有说过从。导入子模块。所以中间模块显然被拖到了命名空间中。是否应该避免这种情况,如果是的话如何避免。
没有什么是“拖入命名空间”的,“子模块”是“模块”命名空间的一部分,因为“子模块”是“模块”的一部分,这就是为什么在模块的init中你可以这样做;“来自(DOT)子模块..”。
该点翻译为“来自 THISPACKAGE->子模块...”
如果“子模块”不是“模块”包的一部分,那么您将无法从模块的init内的“模块”导入它。
添加回答
举报
0/150
提交
取消