gpt4 book ai didi

Python:从B类中的A类调用方法A?

转载 作者:行者123 更新时间:2023-11-28 20:28:36 24 4
gpt4 key购买 nike

有许多与此类似的问题,但没有一个答案是切中要害的 - 所以请耐心等待。

我正在尽最大努力使用 Python 学习 OOP,但我不断遇到错误(就像这个错误),这让我觉得这一切都是毫无意义的,使用方法会更容易。

这是我的代码:

class TheGUI(wx.Frame):
def __init__(self, title, size):
wx.Frame.__init__(self, None, 1, title, size=size)

# The GUI is made ...

textbox.TextCtrl(panel1, 1, pos=(67,7), size=(150, 20))
button1.Bind(wx.EVT_BUTTON, self.button1Click)

self.Show(True)

def button1Click(self, event):
#It needs to do the LoadThread function!

class WebParser:

def LoadThread(self, thread_id):
#It needs to get the contents of textbox!


TheGUI = TheGUI("Text RPG", (500,500))
TheParser = WebParser

TheApp.MainLoop()

所以我遇到的问题是 GUI 类需要使用 WebParser 类中的函数,而 WebParser 类需要从 GUI 类中存在的文本框中获取文本。

我知道我可以通过将对象作为参数传递来做到这一点,但这似乎毫无意义,必须有一种更合乎逻辑的方式来做到这一点,而不是使用类似乎毫无意义?

提前致谢!

最佳答案

你似乎有几个误解。

  1. 正在使用这里的方法。 (您的意思是“函数”,因为它不属于某个类吗?)

  2. 类不是某种功能容器或命名空间。它们定义数据类型。拥有 WebParser 类的意义在于您可以拥有多个 WebParser

  3. 在 Python 中,类也是对象。现在,您并没有让 TheParser 成为一个 WebParser;您正在将其作为类(class)本身的别名。换句话说,TheParser 现在或多或少等同于“网络解析器的概念”。

  4. 四处传递参数并非“毫无意义”;这就是您在函数之间获取信息的方式。你不会(通常!)传课;您传递类的实例。无论您是否使用类(class),您都会遇到基本相同的沟通问题。

解决这个问题非常简单。首先,需要创建 WebParser,因此我们使用它的构造函数来处理它。接下来,我们的 TheGUI 实例(一个糟糕的名字 btw - “the”并不真正属于)需要了解我们的实例,所以我们将它传递给构造函数。这样,实例可以保留对它的引用,并使用它来调用 LoadThread 方法。它还需要保留对 textbox 的引用,以便可以将此信息传递给 LoadThread

看起来像:

class MyGUI(wx.Frame):
def __init__(self, title, size, loader):
wx.Frame.__init__(self, None, 1, title, size=size)

# The GUI is made ...

textbox.TextCtrl(panel1, 1, pos=(67,7), size=(150, 20))
self.textbox = textbox
button1.Bind(wx.EVT_BUTTON, self.button1Click)
self.loader = loader
self.Show(True)

def button1Click(self, event):
self.loader.LoadThread(get_thread_id(), self.textbox)


class WebParser:
def LoadThread(self, thread_id, a_textbox):
do_something_with(a_textbox)


TheGUI = MyGUI("Text RPG", (500,500), WebParser())

TheApp.MainLoop()

关于Python:从B类中的A类调用方法A?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4719185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com