2016-12-14 1 views
0

에서 __init__ 부모 클래스에서 개체를 제거 현재, 나는 두 개의 클래스가 있습니다.무시하거나 자녀의 클래스

아이에게 메시지 박스가 보이기를 원하지 않습니다. 지금 2 페이지 또는 하위 클래스로 이동하여 키보드에서 return 키를 누르면 메시지가 표시됩니다. 그리고 저는 두 번째 페이지에서 그것을 원하지 않습니다. 상위 클래스 인 첫 번째 페이지 만.

하지만 부모 클래스에서 자식 클래스까지 모든 것을 상속해야합니다.

어떻게해야합니까?

답변

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

초기화 방법이란 무엇입니까? 예를 들어 줄 수 있습니까? 나는 또한 전역 바인드 생성 및 바인딩 해제 방법을 시도했지만 ... 내가 그랬을 때 ... 잘 ... 아이가 여전히 부모님을 가지고있다. –

관련 문제