2014-01-23 4 views
2

я определяю подкласс PyControl как это:Пересмотрите существующую функцию

class MyBitmapButton(wx.PyControl): 
    def __init__(self, parent, id=-1, bmp=None, label='blah', pos = wx.DefaultPosition, size=(166,220), style = 0, validator = wx.DefaultValidator, 
       name = "mybitmapbutton"): 
     style |= wx.BORDER_NONE 
     wx.PyControl.__init__(self, parent, id, pos, size, style, validator, name) 
     self.myimg = wx.StaticBitmap(self, -1, bmp, pos=(8,8), size=(150,150)) 
     self.mytxt = wx.StaticText(self, -1, label, (6,165)) 

    def Bind(self, *args, **kwargs): 
     self.Bind(*args, **kwargs)   # infinite recursion problem ! 
     self.myimg.Bind(*args, **kwargs) 
     self.mytxt.Bind(*args, **kwargs) 

Я хотел бы переопределить стандарт Bind, но в этом определении, мне нужно использовать старый Bind (что был предоставлен wx.PyControl).

С помощью этого текущего кода, я получаю infinite recusion loop проблему:

Как повторно использовать старый Bind в определении новогоBind?

+0

В 2 ответы в то же время, с равным качеством, поэтому я действительно не знал, какой ответ выбрать? Извините за один из двух ответов, я дал «Принять как ответ» случайным образом! – Basj

ответ

3

Вы должны использовать super здесь, чтобы получить доступ к версии суперкласса из Bind:

super(MyBitmapButton, self).Bind(*args, **kwargs) 

или, в Python 3, просто пришел

super().Bind(*args, **kwargs). 
1

Изменить эту линию self.Bind(*args, **kwargs) к:

super(MyBitmapButton, self).Bind(*args, **kwargs) 

в Python3 супер будет работать без аргументов:

super().Bind(*args, **kwargs) 

из super docs:

Возвращение прокси объект, который метод делегирует вызовы родительский или класс родства. Это полезно для доступа к унаследованным методам , которые были переопределены в классе. Порядок поиска такой же, как и , используемый getattr(), за исключением того, что сам тип пропускается.
...

Смежные вопросы