2016-12-14 61 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

初始化方法是什么意思?你可以给我一个例子吗?我也尝试创建一个全局绑定和解除绑定的方法......但是当我这样做时......那么......孩子仍然得到父母的 –