python - 在另一个类中使用类变量

标签 python oop wxpython

大家好,

我目前正在使用 Python 和 wxPython 开发一个应用程序。 在其中我有一个对话框,其中填写了多个字段,以便在数据库中插入“文档”。 该对话框的布局基本上由一个 wx.Notebook 组成,带有几个“选项卡”,每个选项卡都包含某种字段。

# Dialog class
class NovoRegisto(wx.Dialog):
    def __init__(self,parent):
        wx.Dialog.__init__(self, parent, title='Registar Nova O.T.', size=(900,600))

        painel = wx.ScrolledWindow(self, -1, style=wx.VSCROLL|wx.HSCROLL)
        painel.SetScrollbars(0,30,0,500)
        notebook = wx.Notebook(painel)

        # create the page windows as children of the notebook
        pag1 = InfoOT(notebook)
        pag2 = Avaliacao(notebook)
        pag3 = Componentes(notebook)
        pag4 = Material(notebook)
        pag5 = OTsRelacionadas(notebook)

                          <...>
        # function to insert data in SQLite database
        def OnRegister(self,event):
                          <...>

# first tab class
class InfoOT(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

                          <...>

如您所见,我为对话框本身提供了一个类(其定义由“注册”按钮控制),然后为笔记本的每个“选项卡”提供了不同的类。

现在,为了将数据提交到数据库,我必须能够访问“OnRegister”定义中的“tabs”变量(属于对话框的类)。但是,我还没有找到一种方法来做到这一点。

有人可以帮助我吗?我必须改变程序的结构吗?我这样做是因为这是我让笔记本工作的唯一方法......

提前谢谢

最佳答案

你的“选项卡”不是类变量,它们是函数__init__内的局部变量。另外,您不需要类变量,您需要实例变量。要读取和写入实例变量,您需要将它们作为 self 的属性来访问,例如 self1.pag1,而不是通过写入它们的名称。

您需要区分:

  • 函数局部变量 - 您在函数内分配的变量
  • 类变量 - 通过属性运算符访问的类属性(例如 NovoRegisto.variable_name)
  • 实例变量 - 通过使用 self 上的属性运算符访问的实例属性(例如 self.pag1)。

您可能应该阅读更多有关如何 Python classes 的信息。应该使用。

作为补充说明,您最常希望使用

super(InfoOT, self).__init__(parent)

超过

wx.Panel.__init__(self, parent)

它在新式类中可用(即间接或直接从内置对象继承的所有类)

关于python - 在另一个类中使用类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4845834/

相关文章:

python - redis.exceptions.ConnectionError : Error -2 connecting to localhost:6379. 名称或服务未知

python - 根据 Python 中列表的索引填充 int64 DataFrame 列

java - 方法和重写扩展类

python - 如何在wx.media中播放mp4文件

Python 类中的公共(public)方法?

python - gunicorn.errors.HaltServer : <HaltServer 'Worker failed to boot.' 3>

class - 类的实例和已经表示一个实例的类之间的区别?

java - 奇怪的构造,java将静态方法转换为类

python - 是否可以删除/移除 wx.aui.AuiManager Pane ?

Python:wx.Frame子类中的self.control是什么意思?