首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -相互引用类(信息流)

Python -相互引用类(信息流)
EN

Stack Overflow用户
提问于 2022-11-15 17:57:07
回答 3查看 22关注 0票数 0

我想知道,在基于GUI的应用程序中信息流的概念是什么,或者任何其他有相同问题的应用程序。当您有两个独立的类及其对象时,它们之间的划分过程是如何完成的。例如,您有一个GUI和AppLogic。

场景1:按下按钮-> GUI正在处理事件->调用AppLogic方法image_clicked()

场景2: HTTPServer获取消息-> AppLogic接收图像-> AppLogic调用GUI方法render_image()

问题是您不能相互引用类,因为第一个类不知道第二个类(这里AppLogic不知道GUI类):

代码语言:javascript
复制
class AppLogic():
    gui : GUI

    def image_clicked(self):
        pass #not important
    
class GUI():
    app_logic : AppLogic
    
    def render_image(self):
        pass #not important

我知道这更像是上学和学习的问题,但我想知道这些问题是如何解决的,或者一些常见的做法。至少链接到一些详细的信息。我不能说出问题的正确答案。

编辑:

我可以使用这段代码,而不需要显式类型声明,而且它可以工作。但是,当我想在AppLogic类定义中调用gui的函数时,intellisense没有提示任何内容,因为它不知道属性gui的类型。我不认为使用这样的代码是很好的做法。

代码语言:javascript
复制
class AppLogic():
    
    def __init__(self) -> None:
        self.gui = None

    def image_clicked(self):
        pass #not important
    
class GUI():
    
    def __init__(self) -> None:
        self.app_logic = None
        
    def render_image(self):
        pass #not important

app = AppLogic()
gui = GUI()

app.gui = gui
gui.app_logic = app
EN

回答 3

Stack Overflow用户

发布于 2022-11-15 18:10:12

你需要初始化你的变量。

代码语言:javascript
复制
gui = Gui()

然后您可以调用这些方法

例如:

代码语言:javascript
复制
class AppLogic:
  gui: Gui

  def image_clicked(self):
      gui = Gui()
      gui.render_image()
    
class Gui:
  logic: AppLogic

    def render_image(self) :
        pass

也可以直接初始化变量。

代码语言:javascript
复制
gui: Gui = Gui()

我希望这能回答你的问题

票数 0
EN

Stack Overflow用户

发布于 2022-11-15 18:27:26

代码语言:javascript
复制
from LogicClass import Logic

class Gui:
    logic: AppLogic = AppLogic()

    def render_image(self) :
        pass

以及:

代码语言:javascript
复制
from GuiClass import Gui

class AppLogic:
   gui: Gui

   def image_clicked(self):
      gui = Gui()
      gui.render_image()
票数 0
EN

Stack Overflow用户

发布于 2022-11-15 18:50:27

代码语言:javascript
复制
from Gui import Gui

class Logic:

    def __init__(self):
        self.gui = Gui()


if __name__ == "__main__":
    Logic()

代码语言:javascript
复制
class Gui:

  def __init__(self):
      print("GUI")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74450198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档