【问题标题】:Use class variable in another class在另一个类中使用类变量
【发布时间】:2011-01-30 22:03:04
【问题描述】:

大家好,

我目前正在开发一个使用 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)

                          <...>

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

现在,为了将数据提交到数据库,我必须能够访问“OnRegister”定义(属于 Dialog 的类)中的“tabs”变量。但是,我仍然没有找到方法。

谁能帮帮我?我必须改变我的程序结构吗?我这样做是因为这是我设法让笔记本工作的唯一方法......

提前谢谢你

【问题讨论】:

  • @delnan,我认为“标签”只是指 pag1、pag2 等。
  • @jambox,是的,你是对的

标签: python oop wxpython


【解决方案1】:

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

你需要区分:

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

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

作为附加说明,您最常希望使用

super(InfoOT, self).__init__(parent)

结束

wx.Panel.__init__(self, parent)

在新式类中可用(即所有间接或直接继承自内置 object 的类)

【讨论】:

  • 他在 init 中也有 def OnRegister,这让我很困惑......
  • @jambox,我现在意识到我在将代码复制到帖子时犯了一个错误。 def OnRegister 与 init 处于同一级别
  • 使用 super(..., self) 的原因是什么?
猜你喜欢
  • 2014-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 2011-11-24
相关资源
最近更新 更多