から__init__親クラスからオブジェクトを削除するには、現在、私は2つのクラスがあります。上書きまたは子供のクラス
子供にメッセージボックスを表示させたくありません。今私がページ2または子クラスに行き、キーボードでリターンを押すと、メッセージが表示されます。そして、私は第2ページでそれを望んでいません。親クラスである最初のページのみ。
しかし、私は親クラスから子クラスへのメッセージボックスをすべて継承する必要があります。
これを達成するにはどうすればよいですか?
から__init__親クラスからオブジェクトを削除するには、現在、私は2つのクラスがあります。上書きまたは子供のクラス
子供にメッセージボックスを表示させたくありません。今私がページ2または子クラスに行き、キーボードでリターンを押すと、メッセージが表示されます。そして、私は第2ページでそれを望んでいません。親クラスである最初のページのみ。
しかし、私は親クラスから子クラスへのメッセージボックスをすべて継承する必要があります。
これを達成するにはどうすればよいですか?
親のコンストラクタの一部を除外する必要がある場合は、デザインに欠陥があると私は思います。代わりに、親クラスをより一般的なものにして、現在の親と現在の子の両方を新しい親から継承させることができます。
本当にそのパターンに固執したい場合は、イベントをバインド解除するだけです。これがイベントに接続されている唯一のコールバックであれば、それを行うことができます。
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()
子オブジェクトをインスタンス化するときは、このメソッドを呼び出すことはありません。
私の子供と親クラスでバインドを解除しようとしましたが、機能しませんでした。 –
別の提案は、バインドを解除しようとするよりも優れています。イベントバインディングを呼び出すための初期化メソッドを作成することです。この方法では、バインドする関数を呼び出すことを選択しない限り、子クラスはバインドされません。 –
初期化メソッドとはどういう意味ですか?あなたは私に例を挙げることができますか?私はまた、グローバルバインドとアンバインドメソッドを作成しようとしました...しかし、私はそれをしました...まあ...子供はまだ親を持って –