2014-01-23 70 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()使用的 相同,只是跳過類型本身。
...