gpt4 book ai didi

python - 如何避免全局变量

转载 作者:太空狗 更新时间:2023-10-29 18:31:39 25 4
gpt4 key购买 nike

在阅读 python 文档和各种邮件列表时,我总是阅读看起来有点像教条的东西。应该尽可能避免使用全局变量,它们的设计很糟糕……好吧,为什么不呢?但是在现实生活中有一些情况我不知道如何避免这种模式。

假设我有一个 GUI,可以从主菜单加载多个文件。与加载的文件对应的文件对象可以在整个 GUI 中使用(例如,将显示图像的图像查看器,并且可以通过不同的对话框/插件在其上执行各种操作)。

构建以下设计真的有问题吗:

  • Menu.py --> 文件将从这里加载
  • Main.py --> 这里可以使用加载的文件对象
  • Dialog1.py --> 或者在这里
  • Dialog2.py --> 或者那里
  • Dialog3.py --> 或者那里
  • ...
  • 全局变量

Globals.py 将存储一个字典,其键是加载文件的名称,值是相应的文件对象。然后,从那里开始,需要这些数据的代码的各个部分将通过弱引用访问它。

很抱歉,如果我的问题看起来(或者是)愚蠢,但你有没有看到任何优雅或无全局的替代方案?一种方法是将加载的数据字典封装在 Main.py 的主应用程序类中,将其视为 GUI 的中央访问部分。然而,这也会带来一些复杂性,因为这个类应该可以从所有需要数据的对话框中轻松访问,即使它们必然是它的直接子级也是如此。

非常感谢你的帮助

最佳答案

应该避免使用全局变量,因为它们会抑制代码重用。多个小部件/应用程序可以很好地存在于同一个主循环中。这允许您将您现在认为的单个 GUI 抽象到一个库中,该库可根据请求创建此类 GUI,以便(例如)单个启动器可以启动共享同一进程的多个顶级 GUI。

如果您使用全局变量,这是不可能的,因为多个 GUI 实例将压倒彼此的状态。

全局变量的替代方法是将所需的属性与顶级小部件相关联,并创建指向相同顶级小部件的子小部件。然后,例如,菜单操作将使用其顶级小部件到达当前打开的文件以便对其进行操作。

关于python - 如何避免全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16011056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com