如何构建模块以避免 "import module.module.module" 之类的事情
How to structure modules to avoid things like "import module.module.module"
我有一个结构如下的模块:
/module
__init__.py
/submod_1
__init__.py
submod_1_class.py
/submod_2
__init__.py
submod_2_class.py
但我发现必须在 submod_1_class.py
中导入 class 非常烦人:
from module.submod_1.submod_1_class import my_class
我希望能够输入的是:
from module import my_class
我浏览了 site-packages
文件夹并浏览了像 numpy
这样的流行模块,但我一直无法弄清楚如何,例如:
import numpy
a = numpy.array([1,2,3,4,5])
当 numpy
数组对象的定义深埋在 numpy
包的几个子文件夹中时,可以使用 。
您可以使用 __init__.py
文件来定义可以从给定模块 import
编辑的内容。例如,对结构的一个非常简单的添加将从 submod_1_class
绘制 Class
,这样外部用户就可以简单地 from module import Class
.
/module
__init__.py
from submod_1 import Class
/submod_1
__init__.py
from submod_1_class import Class
submod_1_class.py
/submod_2
submod_2_class.py
例如,在 numpy
中,顶级 __init__.py
包含 a line,内容如下:
from .core import *
这意味着 /core/__init__.py
中定义的所有内容都可以直接在 numpy
命名空间中从外部使用,即使它实际上可能深埋在某些复杂的结构中。
我有一个结构如下的模块:
/module
__init__.py
/submod_1
__init__.py
submod_1_class.py
/submod_2
__init__.py
submod_2_class.py
但我发现必须在 submod_1_class.py
中导入 class 非常烦人:
from module.submod_1.submod_1_class import my_class
我希望能够输入的是:
from module import my_class
我浏览了 site-packages
文件夹并浏览了像 numpy
这样的流行模块,但我一直无法弄清楚如何,例如:
import numpy
a = numpy.array([1,2,3,4,5])
当 numpy
数组对象的定义深埋在 numpy
包的几个子文件夹中时,可以使用 。
您可以使用 __init__.py
文件来定义可以从给定模块 import
编辑的内容。例如,对结构的一个非常简单的添加将从 submod_1_class
绘制 Class
,这样外部用户就可以简单地 from module import Class
.
/module
__init__.py
from submod_1 import Class
/submod_1
__init__.py
from submod_1_class import Class
submod_1_class.py
/submod_2
submod_2_class.py
例如,在 numpy
中,顶级 __init__.py
包含 a line,内容如下:
from .core import *
这意味着 /core/__init__.py
中定义的所有内容都可以直接在 numpy
命名空间中从外部使用,即使它实际上可能深埋在某些复杂的结构中。