Найти - Пользователи
Полная версия: Наследование атрибутов
Начало » Python для новичков » Наследование атрибутов
1
imonkey
есть несколько классов, в каждом определяются свои переменные, потом их значение должно быть доступно в классе потомке
начало одного из классов родителей
class ActionFrame(wx.Frame):
def __init__(self, parent):

wx.Frame.__init__(self, parent, -1, size=(200,200))
в классе происходит работа во фрейме, где при выборе создается значение переменной и она передается в функцию в этом классе EvtRadioBox и это значение присваивается переменной self.nomer
def EvtRadioBox(self, event):
self.nomer=event.GetInt())
и мне нужно чтобы значение переменной self.nomer передалось в класс потомок
class TableGrid(ActionFrame):
def __init__(self, parent):

wx.Frame.__init__(self, parent, size=(200,200))
print self.nomer
пробовал я создавать экземпляр класса ActionFrame, вызывать функцию EvtRadioBox, но он ругается, говорит что я передаю только одно значение в ActionFrame, но мне туда ничего не нужно передавать, мне нужно чтобы просто значение self.nomer передалось в TableGrid.
Помогите пожалуйста, а то создание проги застопорилось=(
bw
Ничего не понимаю.
Этот код будет работать:
class TableGrid(ActionFrame):
def __init__(self, parent):
...
self.EvtRadioBox(...)
print self.nomer
> чтобы значение переменной self.nomer передалось в класс потомок
> значение self.nomer передалось в TableGrid

Неправильно. Либо я не понял что нужно.
Что это за “передавалось в класс”? Может всё же вы работаете с экземпляром (люди его как self в коде записывают) класса и вам нужно что бы эта переменная была доступна относительно именно экземпляра?

В общем так. Либо EvnRadioBox не вызывается, а значит требуемый атрибут в экземпляре не создается, либо его кто-то (после работы озвученного метода) удаляет. Полагаю что у вас первый вариант заболевания.

p.s. Вы уверены что self.nomer вам нужен в момент инициализации? Я так полагаю что события тогда ещё никакого не произошло (сужу по имени метода, так нет ни малейшего представления нафига он) и атрибут не был создан (создайте его сами при инициализации, либо в при описании класса).

..bw
imonkey
я наверное неправильно объясняю))
вот код
class ActionFrame(wx.Frame):
def __init__(self, parent):

wx.Frame.__init__(self, parent, -1, size=(200,200))
self.SetBackgroundColour('#e2e2e2')

sampleList = [u'ГСМ', u'Спидометр', u'Расход']

sizer = wx.BoxSizer(wx.VERTICAL)

self.rb = wx.RadioBox(
self, -1, u"Выберете нужную таблицу", wx.DefaultPosition, wx.DefaultSize,
sampleList, 1, wx.RA_SPECIFY_COLS
)


self.Bind(wx.EVT_RADIOBOX, self.EvtRadioBox, self.rb)



sizer.Add(self.rb, 0, wx.ALL, 20)

self.b = wx.Button(self, wx.ID_OK)
sizer.Add(self.b, 5, 5)

self.Bind(wx.EVT_BUTTON, self.OnClickOK, self.b)






self.SetSizer(sizer)

def OnClickOK(self, event):
print ('evt %d\n' % self.nomer)


def EvtRadioBox(self, event):
self.nomer=event.GetInt()
print ('EvtRadioBox: %d\n' % event.GetInt())

class TableGrid(ActionFrame):
def __init__(self, parent):

wx.Frame.__init__(self, parent, size=(200,200))
panel = wx.Panel(self, -1)
self.EvtRadioBox()
print self.nomer
в ActionFrame создается фрейм, где выбирается “нужное”, этому “нужное” присваивается значение от 0 до 2, и передается в self.nomer, то есть self.nomer будет равен 0,1,2 в зависимости от выбора.
Затем в классе TableGrid открывается фрейм(он пока пустой) и мне нужно чтобы в классе TableGrid было доступно значение переменной self.nomer
bw
Всё будет доступно, но:

1. В TableGrid.__init__ стоит всё же вызывать не wx.Frame.__init__, а ActionFrame.__init__.
2. В TableGrid.__init__ использование self.nomer вроде как лишено смысла – убрать.
3. В TableGrid.__init__ self.EvtRadioBox() приведёт к ошибке – убрать.
4. Если self.nomer нужен даже в том случае, если соотв. событие не произошло (а он нужен, см. ActionFrame.OnClickOK), можно поступить так:
class ActionFrame(wx.Frame):
nomer = None

def __init__(self, parent):
...
Или так:
class ActionFrame(wx.Frame):
def __init__(self, parent):
...
self.rb = ...
self.nomer = self.rb.GetSelection()
...
А ещё лучше:
class ActionFrame(wx.Frame):

@property
def nomer(self):
return self.rb.GetSelection()

...
p.s. С wx я не работаю, так что каких-то специфичных для него вещей не знаю. Но в данном случае смысла в обработки события я не вижу и скорее всего никто его там не видит.

p.p.s. Шрифт говно. Тренируйтесь в нормальном форматировании кода.

..bw
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB