2014-01-23 39 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,但在这个定义,我需要使用绑定(即由wx.PyControl提供)。

有了这个当前的代码,我得到一个infinite recusion loop问题:

如何重用的Bind的定义Bind

+0

的2个答案来了同时,质量一样,所以我真的不知道选择哪个答案?对不起,有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()使用的 相同,只是跳过类型本身。
...