当条件完成时,我试图删除一个类的实例。但是我遇到了问题,因为它在进入条件之前就被删除了。我不知道发生了什么......代码使用 wxpython 和一些按钮来删除项目,所以我在 init 上正确构建了按钮但是当我尝试删除一个项目时,在它达到第一个条件之前,它似乎被 las 有条件的删除,以前不应该这样做。所以我不知道问题出在哪里......当我第一次按下按钮“deleteitem”时出现的错误是:
'分配前引用的局部变量'T''(在第6行:...如果T.items> 0 :)
但是如果我删除最后一行 del(T) 它不会给出任何错误。
这是基本代码:
class Test(object):
def __init__(self):
self.items=8
T=Test()
if button.GetName()=='deleteitem':
if T.items>0:
T.items-=1
if T.items<0:
del(T)
编辑:
好的,因为我首先发布的示例可以工作,这里是不起作用的代码:
import wx
class Test(object):
def __init__(self):
self.items=8
T=Test()
class MyFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title,
pos=(150, 150), size=(350, 200))
self.btn = wx.Button(self, -1, "Press to delete Item, current Items: "+str(T.items))
self.Bind(wx.EVT_BUTTON, self.OnButton, self.btn)
def OnButton(self, evt):
print 'Current Items: '+str(T.items)
self.btn.SetLabel('Press to delete Item, current Items: '+str(T.items))
if T.items>0:
T.items-=1
if T.items==0:
del(T)
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, "Simple wxPython App")
frame.Show(True)
return True
app = MyApp()
app.MainLoop()
最终工作代码:
import wx
class Test(object):
def __init__(self):
self.items=8
class MyFrame(wx.Frame):
def __init__(self, parent, title):
self.T=Test()
wx.Frame.__init__(self, parent, -1, title,
pos=(150, 150), size=(350, 200))
self.btn = wx.Button(self, -1, "Press to delete Item, current Items: "+str(self.T.items))
self.Bind(wx.EVT_BUTTON, self.OnButton, self.btn)
def OnButton(self, evt):
if self.T.items>0:
self.T.items-=1
if self.T.items==0:
del(self.T)
self.btn.SetLabel('Deleted instance T')
else:
self.btn.SetLabel('Press to delete Item, current Items: '+str(self.T.items))
print 'current Items: '+str(self.T.items)
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, "Simple wxPython App")
frame.Show(True)
return True
app = MyApp()
app.MainLoop()