如何处理对象实例之间或模块之间的通信



我似乎错过了一些基本的Python概念,这个概念太简单了,从来没有人谈论过它。我提前为可能使用了不恰当的描述道歉-我可能知道的不够,无法正确地问这个问题。

这是我得出的一个概念性的死胡同:

我有一个Class Net的实例,它处理通过互联网与某些事物的通信。我有一个Class Process的实例,它做了大量的处理和数据管理我有一个Gui类的实例,它处理Gui。

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

我该如何处理,让这些东西相互交流?继承不起作用——我需要实例,而不是类。此外,继承是一种方式,而不是两种方式。很明显,我可以实例化Gui,然后在其他人被实例化时将其(作为对象(传递给他们。但是桂不会知道进程和网络实例。当然,我可以在创建后手动将Net和Process实例传递给Gui实例,但这似乎是一种破解,而不是正确的做法。此外,我必须手动传递的相互依赖关系的数量随着所涉及对象的数量而快速增长(几乎是因子?(,所以我认为这不是正确的策略。

在用正常功能尝试了同样的东西后,我走到了这个死胡同,在那里我更舒服。由于它们的大小,类似分组的函数生活在不同的模块中,同样是Net、Gui和Process。问题完全一样。"父"模块导入"子"模块,然后可以调用它们的方法。但是,子模块如何调用父模块的方法,以及它们如何调用彼此的方法?一切都是进口的——一切似乎都充满了危险,而且随着更多的物体被涉及,似乎又一次爆发了。

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

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

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

最新更新