我如何让班级互相交流?

2024-10-08 18:21:44 发布

您现在位置:Python中文网/ 问答频道 /正文

情况是这样的

class App(wx.Frame):
    def __init__(self,parent,id=-1,title='Test App'):
        wx.Frame.__init__(self,parent,id,title,size=((1050,690)))

        self.mode = 'Test'


class SetModes:
    def __init__(self):
        self.GetModes = App(None,-1)

        self.appmode = ''

    def SetMode(self):
        self.appmode = self.GetModes.mode

现在这只是一个示例脚本,因为我已经知道这行不通,但它显示了我本质上要做的事情。让我澄清一下:

我想从app类获取并设置一些变量。我想在我的“SetModes”类中执行此操作。问题是我不能为它创建一个实例,因为我不能为该实例指定父对象,因此self.GetModes方法不起作用,它告诉我实例不能“没有”父类,所以这是否意味着我不能创建我的应用类的实例,如果我只想使用它的一些变量和函数??。在

那我该怎么做呢。我可以让一个类与需要父类的类进行通信吗?在


Tags: 实例testselfidapptitleinitmode
2条回答

只是因为wx.框架需要一个父类,并不意味着不能在另一个无关联的类中为它分配引用。只需像平常一样将应用程序实例设置为父对象,但将引用传递给SetModes:

app = App(parent)
setModes = SetModes()
setModes.GetModes = app

这归结为程序的设计问题。小部件需要父级。在

我认为你的部分问题是框架需要从wx.App实例内部初始化,然后必须调用MainLoop()(请参见this tutorial)。注意框架是如何有父级的None)。在

之后,像jdi这样的解决方案就会起作用。但是,如果可以避免的话,我还是不喜欢使用引用。对于一个父对象调用直接子对象的函数,这是可以的,但我个人的规则是,我的类不能看到任何它们不直接拥有的对象(即,不知道子对象的子对象)。在

我非常喜欢PubSub在不相关的类之间进行通信。与wx.Event对象不同,不需要任何继承关系。与jdi提出的参考解决方案不同,类根本不需要了解彼此的结构。在

归根结底,在您的应用程序中,SetModes实例能否在没有实例的情况下存在于?如果没有,您可以将SetModes'逻辑合并到App中吗?如果是,那么编码SetModes来显式地处理App是糟糕的设计。在

使用PubSub,您可以从SetModes发送请求消息。App看到消息,然后可以发送一个响应消息,SetModes会看到这个消息。完全独立,完全异步。SetModes不需要知道App的任何信息,只需要知道消息格式。在

相关问题 更多 >

    热门问题