研究ノート(Pythonの継承)
いくつかの人気の名前があります(親-子クラスは、基底クラス-派生クラス)が
取得コードは、このことを示しています。
1 クラスの父: 2 DEF ワーク(自己): 3 プリント(" 仕事>>>>> " ) 4 5 デフ車(自己): 6 プリント(" 車>>>>>>>>> " ) 7つの 8 クラス息子(父): #想要继承就得添加父类 9 デフ研究(自己): 10 プリント(" 研究>>>>>>>>>> " ) 11 12 OBJ = 息子() 13 OBJ。 仕事() #上記方法では、作業が自己パラメータで、この時点でOBJが向けられている 14 位それはまた重要であるまた、自己は常に(例えば、ここでOBJポインティングなど)、呼び出し元のメソッドを呼び出すためにポイント 15 #のワーク>> >>>
親クラスが追加されていない場合、主サブクラス添加親によるものであり、オブジェクトOBJサブクラスを呼び出すコードによって見ることができるが、親クラスを使用することができる。この場合、この方法は、親クラスを呼び出すことができませんしたがって、このフォームが継承と呼ばれ、与えられている
(自己が常に呼び出し元のメソッドを呼び出すを指します)
(以下のクラスがあまりにも制限を忘れ、親クラスで作業メソッドをオーバーライド)
。1 クラス息子(父): 2 DEF 研究(自己): 。3 印刷(" 研究>>>>>>>>>> " ) 。4 。5 DEF ワーク(自己): 。6 印刷(" s.work ") #を好みます継承書き込み独自の(リライト) 7 8 #この時点では、この方法がされている場合、メソッド呼び出しを見つけるために、サブクラスのメソッドで始まる最初に呼び出さ呼び出さない場合は、親クラスが行った 9 OBJ = 息子を() 10 obj.work() #のs.work
1 DEF ワーク(自己): 2 印刷(" s.work " ) 3 スーパー(息子、自己).work() #振り出し:メソッド呼び出しはスーパー、スーパー(現在のクラスの名前、自己)親が書き換えられています。メソッド()) 4 father.work(自己) #牙II:この方法は、我々は追加するためのイニシアチブを取る必要があり、この時点で自己の親クラスのメソッドを呼び出すためのイニシアチブである親クラスがそのオブジェクトのメソッドを実行する必要があります表し
1 クラス叔父: 2 DEF ビデオ(自己): 3 プリント(" uncle.video " ) 4 クラスの父(叔父): 5 デフワーク(自己): 6 プリント(" father.work " ) 7 クラス母: 8 DEF 車(自己): 9 プリント(" mother.car " ) 10 11 クラスの息子(父、母): 12 デフ研究(自己): 13 印刷(" son.study ")
OBJ = () obj.car() #1 mother.car
(父は、この場合には、母のクラスにジャンプしないクラスCAR()メソッドを見つけることです)
OBJ = A() obj.video() #uncle.video
クラスの叔母: DEF コンピュータ(自己): プリント(" aunt.computer " ) クラスの叔父: デフビデオ(自己): プリント(" uncle.video " ) クラスの父(叔父): デフ作品(自己): 印刷(" 父.work " ) クラスの母親(叔母): デフ車(自己): プリント(" mother.car 」) クラス息子(父、母): デフ研究(自己): プリント(" son.study " ) OBJ = 息子() obj.computer() #aunt.computer
下に示すようにその実行の順序:
赤線は黒線を継承するようになるコード実行のフローである
か、(1)(2)とほぼ、同じではない、左法と呼ばれているがが見つかり、そしてなしされていません最後に探しているが、最後の息子のサブクラスで親の前に返され、母親がクラスを探し始めました、そして最終的に叔母のクラスを指してきたし、自分のコンピュータ()メソッドを見つける
((3)の要約を:、あなたが共通の親クラスを持っている場合方法を探していたときに、必ず最後に見つけることができませんが、最終的にだけで終わりで見つけることがあれば、探すために親に最も原始的に変更しようとしている親は、親クラスを見つけることができません前に)どのようにどのように上の十分な理解メモリ
(以下一部変更されたコード)
クラスの叔父: デフビデオ(自己): プリント(" 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再び呼ばれ、上記のコードのために、その後、最初の母親は、母親がクラスを持っている場合、再び親クラス、親クラスの方法を探して、サブクラスのメソッドを探し始めます車()メソッド、ダイレクトコールが実行されるように、オーバー!)
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__です)