1.最初の質問は:
私たちは、クラスが継承過程で、我々はまた、親クラスのプロパティを継承することができ、親クラスのメソッドを継承するだけでなく、他のクラスから継承することができることを知って、あなたはまた、親クラスに基づいて独自のものを追加することができます。
2. 2番目の質問は:
私たちは、親クラスのプロパティとメソッドは、一般的に書くために、その後のない親クラスの時間のプロパティとメソッドを継承します。方法は、一般的に使用される親クラスのメソッド/プロパティの名前は、さらにスーパー()メソッドへの道があります。しかし、実際にはこれらの2つの方法が異なるものです。
まず、例の最初の方法:親クラスメソッド/プロパティの名前。
コード:
クラスBaseClassの: num_Base_calls = 0 DEF call_me(自己): 印刷(" BaseClassの上でメソッドを呼び出す" ) self.num_Base_calls + = 1 クラス:LeftSubclass(BaseClassの) num_left_calls = 0 DEF call_me(自己): BaseClass.call_me(自己) プリント(" LeftSubclass上のメソッドを呼び出す" ) self.num_left_calls + = 1 クラスRightSubclass(BaseClassの): num_Right_calls = 0 DEF call_me(自己): BaseClass.call_me(自己) プリント(" RightSubclass上でメソッドを呼び出す" ) self.num_Right_calls + = 1 クラスのサブクラス(LeftSubclass、RightSubclass): num_Sub_calls = 0 DEF call_me(自己): LeftSubclass.call_me(自己) RightSubclass.call_me(自己) (プリント" サブクラスに呼び出すメソッド" ) self.num_Sub_calls + = 1 、S = サブクラス() s.call_me() BaseClassの上の#コーリング方法 LeftSubclass上でメソッドを呼び出す# BaseClassのの上でメソッドを呼び出す# RightSubclassの上でメソッドを呼び出す# サブクラスのメソッドを呼び出す# プリント(s.num_Sub_calls) プリント(s.num_left_calls) プリント(s.num_Right_calls) プリント(s.num_Base_calls) #1 #1 #1 #2
注1:サブクラスにそれぞれ継承をLeftclassとRightclass、その後、LeftclassとRightclassを継承するために、基底クラスと呼ばれるように、基本クラスがあります。このような単純な関係です。
注2:最後のサブクラスは、実行時に問題がある、私たちは、基本クラスのCall_me最も基本的な方法が2回実行されましたか?
注3:多重継承を覚えておくためには、私たちは、クラスのメソッド呼び出しの次のレベルではなく、「親」のアプローチをしたいということです。実際には、次の方法は、親クラスまたはそれ以前の祖先のクラスに属していないことがあります。
4.説明点が図1に示されているこのモデルの意識であることを特徴とします。
サブクラス - --Baseclassを探して--Leftclass--を探して:最初のパス:プリント基底クラスとLeftclass
サブクラス - 探して - Rightclass - 探して - 基底クラス:二回目:印刷:基底クラスとRightclass
サブクラス - 自身 - 印刷サブクラス
注5:実際には、我々は最終的に連続する過程で、実際には、我々はそれが受け入れられないこのように、再度、親クラス(元先祖クラス)の親を見つけたいです。だから我々は一度だけのブロックを見て、スーパー()関数を導入しました。
第二:私たちは、次のようにのみ、再び祖先クラスがそれを見つけるために、スーパー()メソッドを使用します。
クラスBaseClassの: num_Base_calls = 0 DEF call_me(自己): 印刷(" BaseClassの上のメソッドを呼び出す" ) self.num_Base_calls + = 1 クラスLeftSubclass(BaseClassの): num_left_calls = 0 DEF call_me(自己): 。スーパー()call_me() 印刷(" LeftSubclass上のメソッドを呼び出す" ) self.num_left_calls + = 1 クラスRightSubclass(BaseClassの): num_Right_calls = 0 DEF call_me(自己): 。スーパー()call_me() 印刷(" RightSubclass上のメソッドを呼び出す" ) self.num_Right_calls + = 1 クラスのサブクラス(LeftSubclass、RightSubclass): num_Sub_calls = 0 DEF call_me(自己): 。スーパー()call_me() 印刷(" サブクラスのメソッドを呼び出す" ) 自己。 num_Sub_calls + = 1 、S = サブクラス() s.call_me() #BaseClassのの上でメソッドを呼び出す RightSubclassオンメソッドを呼び出す# LeftSubclassの#呼び出し方法 サブクラスのメソッド呼び出し# プリント(s.num_Sub_calls) プリント(s.num_left_calls) 、印刷(s.num_Right_calls) プリント(s.num_Base_calls) #1 #1 #1 #1
注1:私たちは、この問題を解決するには、この方法では、各サブカテゴリー()内の各クラスのスーパーを追加しました。
注2:次のようにこのように検索順序は次のようになります。
サブクラス - 検索 - leftclassとrightclass - 含ま - 基底クラス:印刷:basecalss、右のサブクラス、leftclass、サブクラス
3.概要:
第一の方法は、再びループバックされ、バイナリモードパスを使用するために再度行くこと、行くです。
第二の方法は、層剥離のない同様の予約によってタマネギ、層剥離のような、含まれる方法を使用することです。