【问题标题】:How do I handle communication between object instances, or between modules?如何处理对象实例之间或模块之间的通信?
【发布时间】:2021-03-20 20:40:42
【问题描述】:

我似乎遗漏了一些基本的 Python 概念,这些概念非常简单,以至于没有人谈论它。对于可能使用不正确的描述,我提前道歉 - 我可能没有足够的知识来正确地提出问题。

这是我遇到的一个概念上的死胡同:

我有一个 Class Net 实例,它处理通过 Internet 与某些事物进行通信。 我有一个 Class Process 的实例,它进行大量的处理和数据管理 我有一个 GUI 类的实例,它处理 GUI。

Gui 实例需要访问 Net 和 Process 实例,因为来自其小部件的回调会调用这些方法等。 Net 和 Process 实例需要访问 Gui 实例的一些方法,因为它们偶尔需要显示内容(它在做什么、查询结果等)

我如何管理它以便这些东西相互交流?继承不起作用 - 我需要实例,而不是类。此外,继承是一种方式,而不是两种方式。 我显然可以实例化 Gui,然后在实例化时将其(作为对象)传递给其他人。但是 Gui 将不知道 Process 和 Net 实例。我当然可以在创建后手动将 Net 和 Process 实例传递给 Gui 实例,但这似乎是一种 hack,而不是正确的做法。此外,随着所涉及的对象数量的增加,我必须手动传递的相互依赖的数量增长得相当快(几乎是阶乘?) - 所以我认为这不是正确的策略。

在用正常功能尝试了同样的事情后,我到达了这个死胡同,在那里我更舒服。由于它们的大小,类似分组的函数存在于单独的模块中,同样是 Net、Gui 和 Process。问题完全一样。 “父”模块导入“子”模块,然后可以调用它们的方法。但是子模块如何调用父模块的方法,又如何调用彼此的方法呢?让所有东西都导入一切似乎充满了危险,并且随着更多对象的参与似乎再次爆发。

那么我在组织我遇到这个问题的代码时缺少什么,而显然所有其他 python 用户都没有?

【问题讨论】:

标签: python concept


【解决方案1】:

这个问题的答案非常简单。

任何需要对其他模块全局可用的东西都可以存储在它自己的模块中,例如 global_param。每个其他模块都可以导入 global_param,然后根据需要使用和修改其内容。这也避免了循环导入的任何问题。 不知道为什么我花了这么长时间才弄清楚...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 2016-12-31
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    相关资源
    最近更新 更多