Я пытаюсь удалить экземпляр класса, когда условие выполнено. Но у меня проблемы, потому что он удаляется до того, как войдет в состояние. Я не знаю, что происходит... В коде используется wxpython с некоторыми кнопками для удаления элементов, поэтому я правильно создаю кнопки при инициализации, но когда я пытаюсь удалить элемент, прежде чем он достигает первого условного выражения, кажется, быть удалено условным выражением 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()