在另一个类中使用类变量
大家好,
我现在正在用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”这个定义里访问“标签页”的变量(这个定义属于对话框的类)。不过,我还没找到办法做到这一点。
有没有人能帮我一下?我需要改变我程序的结构吗?我这样做是因为这是我唯一能让笔记本正常工作的方式……
提前谢谢大家
1 个回答
3
你的“tabs”并不是类变量,而是函数 __init__
内部的局部变量。而且你其实不需要类变量,你需要的是实例变量。要读取和写入实例变量,你需要通过 self
来访问它们,比如 self.pag1
,而不是直接写它们的名字。
你需要区分以下几种变量:
- 函数局部变量 - 在函数内部定义的变量
- 类变量 - 通过属性操作符访问的类属性(比如
NovoRegisto.variable_name
) - 实例变量 - 通过
self
使用属性操作符访问的实例属性(比如self.pag1
)。
你可能需要多了解一下如何使用 Python 类。
另外,你通常会想使用
super(InfoOT, self).__init__(parent)
而不是
wx.Panel.__init__(self, parent)
这个在新式类中可用(也就是所有直接或间接继承自内置 object
的类)。