--python研究ノート(継承)

研究ノート(Pythonの継承)

いくつかの人気の名前があります(親-子クラスは、基底クラス-派生クラス)が
取得コードは、このことを示しています。

1  クラスの父:
 2      DEF ワーク(自己):
 3          プリント" 仕事>>>>> " 4  
5      デフ車(自己):
 6          プリント" 車>>>>>>>>> " 7つの 
8  クラス息子(父):   想要继承就得添加父类
9      デフ研究(自己):
 10          プリント" 研究>>>>>>>>>> " 11            
12 OBJ = 息子()    
 13 OBJ。    仕事() 上記方法では、作業が自己パラメータで、この時点でOBJが向けられている
14  それはまた重要であるまた、自己は常に(例えば、ここでOBJポインティングなど)、呼び出し元のメソッドを呼び出すためにポイント
15  #のワーク>> >>>

 

親クラスが追加されていない場合、主サブクラス添加親によるものであり、オブジェクトOBJサブクラスを呼び出すコードによって見ることができるが、親クラスを使用することができる。この場合、この方法は、親クラスを呼び出すことができませんしたがって、このフォームが継承と呼ばれ、与えられている
(自己が常に呼び出し元のメソッドを呼び出すを指します)

図1に示すように、親クラスの継承、親クラス一部を呼び出すにしたくない場合、あなたはサブクラスで独自のを書き換える必要があります。

(以下のクラスがあまりにも制限を忘れ、親クラスで作業メソッドをオーバーライド)

。1  クラス息子(父):
 2      DEF 研究(自己):
 。3          印刷" 研究>>>>>>>>>> " 。4  
。5      DEF ワーク(自己):
 。6          印刷" s.work "#を好みます継承書き込み独自の(リライト)
7  
8  この時点では、この方法がされている場合、メソッド呼び出しを見つけるために、サブクラスのメソッドで始まる最初に呼び出さ呼び出さない場合は、親クラスが行った
9 OBJ = 息子を()
 10 obj.work()    s.work

 

2、親クラスのメソッド、独自のサブクラスのオーバーライドから継承されたが、まだ親クラスが上書きされて実行したい場合は、以下の操作を実行します。

1  DEF ワーク(自己):
 2      印刷" s.work " 3      スーパー(息子、自己).work()   振り出し:メソッド呼び出しはスーパー、スーパー(現在のクラスの名前、自己)親が書き換えられています。メソッド())
4      father.work(自己)         牙II:この方法は、我々は追加するためのイニシアチブを取る必要があり、この時点で自己の親クラスのメソッドを呼び出すためのイニシアチブである親クラスがそのオブジェクトのメソッドを実行する必要があります表し

複数の親クラス缶を継承など3、PythonとC ++

1  クラス叔父:
 2      DEF ビデオ(自己):
 3          プリント" uncle.video " 4  クラスの父(叔父):
 5      デフワーク(自己):
 6          プリント" father.work " 7  クラス母:
 8      DEF 車(自己):
 9          プリント" mother.car " 10          
11  クラスの息子(父、母):  
 12      デフ研究(自己):
 13         印刷" son.study "

 

(1)複数の親クラスの継承は、右の最初の継承に左:

OBJ = ()
obj.car()     #1 mother.car

 

(父は、この場合には、母のクラスにジャンプしないクラスCAR()メソッドを見つけることです)

(2)継承上記の親クラスは、親クラスを持っているが、次の方法を見つけるために、継承された親クラスが呼ばれている「最終的に探している」場合は

OBJ = A()
obj.video()    uncle.video

 

(3)二つのバージョン上記と同じ親への最終ポイントに基づいていない、そして第三の決意は、現在、以下のように、同じを行う場合を議論し、最終的な親に基づいています。

クラスの叔母:
     DEF コンピュータ(自己):
         プリント" aunt.computer " 


クラスの叔父:
     デフビデオ(自己):
         プリント" uncle.video " 


クラスの父(叔父):
     デフ作品(自己):
         印刷" 父.work " 


クラスの母親(叔母):
     デフ車(自己):
         プリント" mother.car 


クラス息子(父、母):
     デフ研究(自己):
         プリント" son.study " 

OBJ = 息子()
obj.computer()   aunt.computer

 

下に示すようにその実行の順序:
実行順序
赤線は黒線を継承するようになるコード実行のフローである
か、(1)(2)とほぼ、同じではない、左法と呼ばれているがが見つかり、そしてなしされていません最後に探しているが、最後の息子のサブクラスで親の前に返され、母親がクラスを探し始めました、そして最終的に叔母のクラスを指してきたし、自分のコンピュータ()メソッドを見つける
((3)の要約を、あなたが共通の親クラスを持っている場合方法を探していたときに、必ず最後に見つけることができませんが、最終的にだけで終わりで見つけることがあれば、探すために親に最も原始的に変更しようとしている親は、親クラスを見つけることができません前にどのようにどのように上の十分な理解メモリ

(4)自己。(シーケンシャルコードの実行を使用して)方法

(以下一部変更されたコード)

クラスの叔父:
     デフビデオ(自己):
         プリント" uncle.video " クラスの父(叔父):
     デフ作品(自己):
         プリント" father.work " 
        self.car()
    デフ車(自己):
         プリント" father.car " クラスの母:
     デフ車(自己):
         プリント" mother.car " 
        
クラス息子(母親、父親):  
     デフ研究(自己):
         プリント" son.study " 
OBJ = 息子()
obj.work()    father.work   
              mother.car  

 

母親が見つけ、self.car()と同様の方法で、方法を探して、親への旅行で、クラスの父で実行するために、それらのメソッド好きではなかったため、オブジェクトは、それが理由に立つときに優先されます同じクラスが存在すべきであることをしかし、結果はその理由は、非常にシンプルで、mother.carあるそれは自己に来るとき。メソッド()、それはその標的に戻す必要がありますに(オブジェクトが自己を指摘し、このコードがobjである)を再度実行するために呼ばれるクラスそのメソッドを呼び出し)(obj.car再び呼ばれ、上記のコードのために、その後、最初の母親は、母親がクラスを持っている場合、再び親クラス、親クラスの方法を探して、サブクラスのメソッドを探し始めます車()メソッド、ダイレクトコールが実行されるように、オーバー!

(5)クラスの__init __()メソッドを実行するための時間を見つけるために最初のものです:

1  クラス叔父:
 2      DEF  __init__ (自己):
 3          プリント" uncle.init " 4      デフビデオ(自己):
 5          プリント" uncle.video " 6  クラス父親(叔父):
 7      デフ __init__ (自己):
 8          プリント" father.init " 9      デフワーク(自己):
 10          プリント" father.work " 11 クラスの母:
 12      デフ車(自己):
 13          プリント" mother.car " 14          
15  クラスの息子(父、母):  
 16      デフ研究(自己):
 17          プリント" son.study " 18 OBJ =息子( )    father.init

 

(父親クラス上記コードはまた、私は、そのクラスのinitメソッドをコールしなければならないので、親クラスが、それらはまた、__init__方法が、サブクラス父の最初のトラバースを有する継承するたびに、そのクラスのオブジェクトの実装のみ一度実行満たさ最初方法__init__です

おすすめ

転載: www.cnblogs.com/renio/p/12370151.html