我定义了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
,但在此定义中,我需要使用旧绑定(由{{1提供) }})。
使用此当前代码,我遇到wx.PyControl
问题:
如何在新 infinite recusion loop
的定义中重复使用旧 Bind
?
答案 0 :(得分:3)
您需要在此处使用super
来访问超类的Bind
版本:
super(MyBitmapButton, self).Bind(*args, **kwargs)
或者,在Python 3中,只需
super().Bind(*args, **kwargs).
答案 1 :(得分:1)
将此行self.Bind(*args, **kwargs)
更改为:
super(MyBitmapButton, self).Bind(*args, **kwargs)
python3中的将在没有参数的情况下工作:
super().Bind(*args, **kwargs)
来自super
docs:
返回将方法调用委托给父或者的代理对象 兄弟姐妹类型。这对于访问继承的方法很有用 在课堂上被覆盖的。搜索顺序与此相同 getattr()使用,除了跳过类型本身 ...