在Python包的命名空间中直接暴露模块内的类
我有一个使用wxPython的应用程序,里面有各种图形界面(GUI)类,它们都放在一个叫做gui
的包里。这样设置后,导入主窗口的方式是这样的:
from gui.mainwindow import MainWindow
我觉得这样看起来有点乱,所以我修改了gui
包里的__init__.py
文件,让它直接把类导入到包的命名空间里:
from mainwindow import MainWindow
这样我就可以用下面的方式导入主窗口了:
from gui import MainWindow
这样看起来更美观,我觉得这也更能准确地表达我在做什么(从gui
的“命名空间”中导入MainWindow
类)。我创建gui
包的原因是为了把所有的GUI相关内容放在一起。其实我也可以只做一个gui
模块,把所有的GUI类都放在里面,但我觉得那样会很难管理。现在这个包看起来像一个模块,但又能把类分开到各自的模块里(还有一些辅助函数等等)。
我觉得这整件事有点小题大做,但我只是想分享一下,看看别人对这个想法有什么看法。
1 个回答
6
这个情况其实很常见,我觉得这也是你可以在 __init__.py
文件里包含内容的主要原因。
你可以通过在 __init__.py
文件中搜索 import 语句来确认这一点,你会发现这个用法在标准库和常见的包中都被广泛使用。