在另一个类中使用类变量

时间:2011-01-30 22:03:05

标签: python oop wxpython

向大家致意,

我目前正在使用Python和wxPython开发应用程序。 在其中我有一个Dialog,其中填充了几个字段,以便在数据库中插入“文档”。 该对话框的布局基本上由一个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本身的类(定义由“Register”按钮控制),然后是笔记本的每个“标签”的不同类。

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

任何人都可以帮助我吗?我是否必须更改程序的结构?我是这样做的,因为这是我设法让笔记本工作的唯一方法......

提前谢谢

1 个答案:

答案 0 :(得分:3)

您的“标签”不是类变量,它们是函数__init__内的局部变量。你也不想要类变量,你想要实例变量。要读取和编写实例变量,您需要将其作为self的属性进行访问,例如self1.pag1,而不是通过编写其名称。

您需要区分:

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

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

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

super(InfoOT, self).__init__(parent)

wx.Panel.__init__(self, parent)

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