在Python包的命名空间中直接暴露模块内的类

14 投票
1 回答
3848 浏览
提问于 2025-04-15 21:29

我有一个使用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 语句来确认这一点,你会发现这个用法在标准库和常见的包中都被广泛使用。

撰写回答