2016-12-14 113 views
0

移除__init__父類的對象目前,我有兩個類:覆蓋或孩子的班級

class Parent: 
    def __init__(self, controller, parent): 
     # Key press event bind 'Return Key' 
     self.controller.bind('<Return>', self.averageTesting) 

    def averageTesting(variable): 
     if len(variable) > 0: 
      return variable 
     else: 
      messagebox.showerror("Error", "Enter a valid variable") 

class Child(Parent): 
     def __init__(self): 
      ...... 

父類實際上是一個頁面,子類是Tkinter的框架頁面的第二頁。

我不希望孩子有這些URL的表現。現在,當我轉到第二頁或孩子課時,我按下鍵盤上的返回鍵時,顯示消息。我不想在第二頁。只有第一頁是父類。

但我需要繼承一切,但是從父類的子類的消息框。

我怎麼做到這一點?

回答

0

就個人而言,我認爲,如果你必須排除的父類的構造的部分,然後你的設計是有缺陷的。你可能反而讓父類更通用的,讓你的當前父和您當前的孩子都來自新的父繼承。

如果你真的想堅持該模式,那麼你可以只解除綁定事件。如果這是連接到事件的唯一回調,那麼你可以做。

x = Child() 
x.controller.unbind('<Return>') 

編輯:

我的下一個建議是移動而不是綁定到父類中的單獨的方法。例如。

class Parent: 
    def __init__(self, controller, parent): 
     self.controller = controller 
     ... 

    def averageTesting(variable): 
     if len(variable) > 0: 
      return variable 
     else: 
      messagebox.showerror("Error", "Enter a valid variable") 


    def initializeBinding(self): 
     self.controller.bind('<Return>', self.averageTesting) 
     ... # plus anymore bindings that only the parent must have 

class Child(Parent): 
    def __init__(self): 
     ... 

所以現在當你想使用父母,你會這樣做。

p = Parent(...) 
p.initializeBinding() 

而當你實例化一個Child對象時,你不會調用該方法。

+0

我試圖解除綁定在我的孩子和父類,但它不起作用。 –

+0

另一個建議是,比試圖解除綁定更好的做法是使某種初始化方法從中調用事件綁定。這樣,除非您選擇調用綁定它的函數,否則您的子類將不會被綁定。 –

+0

初始化方法是什麼意思?你可以給我一個例子嗎?我也嘗試創建一個全局綁定和解除綁定的方法......但是當我這樣做時......那麼......孩子仍然得到父母的 –