ワン:継承の基礎
[1]のコンセプトに基づいて
(1)遺伝
(1)定義:新しいクラスの定義方法
(2)派生クラスはサブクラス/派生クラスは親クラスが後継/基底クラスであると呼ばれていると呼ばれています
たとえば:Sicongはサブクラスと王健林に属しているので、Sicong王健林は、親クラスに属するプロパティを継承します
PS:クラスとクラス間の継承関係は、プログラムに属しています
(2)の役割を:
(1)サブクラスは親クラス、メソッド、等の特定のプロパティを継承します
(2)親クラスコード量増加のコードサブクラスを再利用
(3)使用:
(1)構文:クラス+クラス名(親名):
例えば:
クラス父: パス・ クラス息子(父): 合格 プリント(ソン__bases__)#(<クラスの__ __main父。 '>、)
[2]の拡張機能を継承しました。
(1)抽象的:
(1)関係は前に抽象を継承する必要がありますされているどのような連続を記述する
(2)新たなクラスを形成するために抽出された同一の機能および属性を持つ抽象サブクラスの複数であります
(3)既存のクラスは、既存の機能を変更または拡張することができる継承
ケース:
クラス父: デフ __init__ (自己、名前、年齢): self.name = 名前 self.age = 年齢の クラス息子(父): デフ __init__ (自己、名前、年齢): self.name = 名前 self.age = 年齢の 脂肪 =父(' 爸爸'、40 ) の息子 =ソン(' 儿子'、18 ) 印刷(fat.name) #爸爸 プリント(son.name) #儿子 # PS:重複したコードの多くを見ることができます
PS:そこコード比較的乏しい組織構造内の重複コードの多く
ソリューション:
クラスパーソン: DEF __init__ (セルフ、名前、年齢): self.name = 名前 self.age = 年齢の クラスの父(人): 印刷(「親クラスからの呼び出し」) クラス息子(人): 印刷(" から親クラスを呼び出す' ) FAT =父(' 父 '40 ) の息子 =息子(' 息子"、18である) プリント(fat.name) #お父さんの 印刷(son.name) #の息子
PS:その残りのクラスの新しいクラスは、この新しいクラスは、同じ機能によって冗長コードを減らす継承大に集約抽出
(2)属性の順序を探します:
(1)まず、オブジェクト自体を見つけます
クラスは、(2)オブジェクトが属する見つけるために
(3)親クラスを探します
(4)オブジェクトを探します
例えば:
クラスの人: #のクラス注釈付き テスト= 「親」 クラスの父(人):# のオブジェクトが注釈されている テスト= 「クラス」 合格 FAT = 父() fat.test = 「オブジェクト」 印刷(fat.test) 「」 ' 1:オブジェクト 2:クラス 3:親クラス ' ''
(3)派生:
ときに別のコンテンツ(1)サブクラスは親クラスに表示された場合
異なる内容が意味を成さないと同一である場合(2)通常のサブクラスは、親に表示されます
(3)親クラスの上にその機能を拡張する主である属性およびメソッドを継承
例えば:
クラスの動物: DEF RUN(セルフ): 印刷(' 動物は実行したい' ) クラスキャット(動物): #の拡張機能、新機能が DEF EAT(セルフ): 印刷(' 魚のような猫' ) CAT = キャット( ) #の行動は、親クラスの継承 cat.run() #の動物が実行したい #新しいプロパティを呼び出し cat.eatを() #の猫が魚を食べるのが好き #は、 あなた自身の新しいプロパティを追加 cat.color = 「黒軍曹」 印刷( cat.color) #の猫は魚を食べるのが好きです
(4)カバー
(1)も上書きする称される
(2)サブクラスは親クラスと同じことを浮上しました
オブジェクトはサブクラスにある場合(3)呼び出し時に勝ちます
例えば:
クラスの動物: DEF RUN(セルフ): 印刷(' 動物は実行したい' ) クラスキャット(動物): DEF RUN(セルフ): 印刷(' アニマル猫を実行するのが好き' ) #の新機能-の延長 DEF EAT(セルフ): 印刷(「魚のような猫」) CAT = 猫() #親クラスの振る舞いを継承し cat.run() #の動物の猫はクラス属性を見つける直接実行するのが好き
(4)サブクラスは、親クラスと呼ばれています。
(1)継承:親クラスとより類似しているサブクラスは、時間に関連しています
(2)スーパー:親クラスに関連したサブクラスはそれほど近くありません
(3)親クラス名の名前の名前を親クラスに関連付けられた親クラスのメソッドがそれほど近くないサブクラス
ケース:
(1)スーパー:
クラス電話: DEF コール(セルフ、名): 印刷(' %S携帯電話の使用'%の名) クラスパーソン(電話番号): DEF RUN(自己): スーパー()コール(' SR ' ) あたり = 人( ) per.run() #の携帯電話を使用したSR
(2)指名道姓:
クラス電話: DEF コール(セルフ、名): 印刷(' %S携帯電話の使用'%の名) クラスパーソン(電話番号): DEF RUN(セルフ): Phone.call(自己、' SR ' ) あたり = (人) per.run() #の携帯電話を使用したSR
PS:継承を行うにはその何も
II:組み合わせ
[1]:基本的な概念
(1)コンセプト
(1)どのような関係を記述した関係とは何ですか
(2)そのようにPythonでオブジェクト内のオブジェクトのプロパティとして
(2)目的組合せ
(1)コードの再利用であります
(2)還元は、コード間の結合の影響を低減します
クラス電話: DEF __init__ (セルフ、種類,.価格、): self.kind = 種類 self.price = 価格。 DEFのコール(セルフ): 印刷(' ビジー状態である' ) クラスの学生: DEF __init__ (セルフ、名前、電話番号) : self.name = 名前 self.phone = 電話 を印刷(' %Sは電話で話している'%self.name) フォー =電話(' アップル'、9999を) STU =学生(' SR ' 、フォー) stu.phone.call() #は忙しいです
PS:
(1)学生は、呼び出しは、自分の名前空間に格納する必要が電話したいと思います
必要が一貫した名前空間オブジェクトを維持する場合には、独自の名前空間に格納されている場合(2)オブジェクトは、パラメータを渡す必要があるので
(3)プロセスは、クラスの形式に渡されるパラメータの内部機能に対応するフォークラスを促進することができる変数をインスタンス化されるオブジェクトを作成します
(4)関数パラメータデータを受信し、相互作用
(3)ダイヤモンドの継承
(1)新しいクラス:
(1)オブジェクトの暗黙的またはサブクラスの一部を示しています
(2)すべての新しいクラスのpython3であります
(2)クラシック
(1)オブジェクトのサブクラスに属していません
(3)python2にのみ表示されます
(4)ダイヤモンドの検索順序
(1)クラシック:
あなたが存在しないプロパティを探している場合はpython2状況での多重継承の深さを見て実行します
グラフィック:
(3)新しいカテゴリ:
(1)のpython3において深さ優先を行う共通の親クラスが存在しない場合
(2)それは幅優先を実行する共通の親クラスを有する場合
PS:
(1)検索順序は、MROが見ることができます
(2)このパラメータはpython2でありません