情况是这样的
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方法不起作用,它告诉我实例不能“没有”父类,所以这是否意味着我不能创建我的应用类的实例,如果我只想使用它的一些变量和函数??。在
那我该怎么做呢。我可以让一个类与需要父类的类进行通信吗?在
只是因为wx.框架需要一个父类,并不意味着不能在另一个无关联的类中为它分配引用。只需像平常一样将应用程序实例设置为父对象,但将引用传递给SetModes:
这归结为程序的设计问题。小部件需要父级。在
我认为你的部分问题是框架需要从
wx.App
实例内部初始化,然后必须调用MainLoop()
(请参见this tutorial)。注意框架是如何有父级的None
)。在之后,像jdi这样的解决方案就会起作用。但是,如果可以避免的话,我还是不喜欢使用引用。对于一个父对象调用直接子对象的函数,这是可以的,但我个人的规则是,我的类不能看到任何它们不直接拥有的对象(即,不知道子对象的子对象)。在
我非常喜欢PubSub在不相关的类之间进行通信。与
wx.Event
对象不同,不需要任何继承关系。与jdi提出的参考解决方案不同,类根本不需要了解彼此的结构。在归根结底,在您的应用程序中,
SetModes
实例能否在没有实例的情况下存在于?如果没有,您可以将SetModes
'逻辑合并到App
中吗?如果是,那么编码SetModes
来显式地处理App
是糟糕的设计。在使用
PubSub
,您可以从SetModes
发送请求消息。App
看到消息,然后可以发送一个响应消息,SetModes
会看到这个消息。完全独立,完全异步。SetModes
不需要知道App
的任何信息,只需要知道消息格式。在相关问题 更多 >
编程相关推荐