从子类中覆盖或删除__init__父类中的对象

时间:2016-12-14 05:45:37

标签: python tkinter

目前,我有两个班级:

 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框架页面的第二页。

我不希望孩子显示消息框。现在,当我去第二页或子课时,我按下键盘上的返回信息,消息显示出来。我不希望在第二页中。只有第一页是父类。

但是我需要继承从父类到子类的消息框。

我该如何做到这一点?

1 个答案:

答案 0 :(得分: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对象时,您不会调用该方法。