オブジェクト指向の三つの特徴
- パッケージ に従って 強制属性 と メソッド パッケージ 抽象に クラス での
- 継承 の実装コードを再利用するために、同じコードが書か繰り返す必要はありません
- 多型 の異なるオブジェクトは、異なる結果を生成し、同じメソッドを呼び出すコードの柔軟性を増加します
01.単一継承
相続、構文や機能の1.1概念
継承の概念:サブクラスは 持っている 親クラス のすべて のメソッド と プロパティを
クラスの動物: DEF (自己を)食べる: プリント(" 吃は" ) デフ(自己を)飲む: 印刷(" 喝" ) デフ(自己)を実行します: 印刷(" 跑" ) デフ(自己)眠る: プリント(" 睡" ) クラスの犬: DEF 自己(食べる): プリント(" 吃" ) デフ飲む(自己): プリント(" ドリンク" ) DEF RUN(セルフ): 印刷(" ファイル名を指定して実行" ) DEF SLEEP(セルフ): 印刷(" スリープ" ) DEF 樹皮(セルフ): 印刷(" 樹皮" ) #オブジェクトを作成-犬はオブジェクト wangcai =を犬() wangcai.eat() wangcai.drink() wangcai.run() wangcai.sleep() wangcai.bark()
1)相続の構文
クラスのクラス名(親名): パス
クラス動物: DEF EAT(セルフ): 印刷(" 食べ--- " ) DEF ドリンク(セルフ):。。 印刷(" ドリンク--- " ) DEF RUN(セルフ): 印刷(" ラン--- " ) DEFのSLEEP (自己): 印刷(「スリープ--- 」) クラス・ドッグ(動物): #の子クラスの親クラスのすべてのプロパティとメソッドがある #はDEF(自己を)食べる: #の 印刷(「食べる」) #1 #1 。DEFドリンク(セルフ。 ): # 印刷( "ドリンク") # # DEF RUN(セルフ): # プリント( "ファイル名を指定して実行") ## のDEFのSLEEP(セルフ): #の 印刷( "スリープ")DEF 樹皮(セルフ): 印刷(" 樹皮" )#オブジェクトを作成-オブジェクト犬 wangcai = 犬() wangcai.eat() wangcai.drink() wangcai.run() wangcai.sleep() wangcai.bark()
- サブクラスが から継承 親クラス、あなたが直接することができます 楽しむ 親クラスのメソッドは、再び開発する必要がパッケージ化されています
- サブクラスは、 よるべきで 機能し、パッケージ サブクラス固有のプロパティとメソッドを
2)用語
Dog
クラスはAnimal
、クラスのサブクラスで、Animal
クラスがあるDog
のクラスの親クラス、Dog
からクラスAnimal
クラス継承Dog
クラスは、Animal
クラスの派生クラス、Animal
クラスであるDog
クラスベースクラス、Dog
からクラスAnimal
クラスは、派生します
推移3)継承
C
クラスB
を持つクラスB
クラスとからA
、クラスの継承- その後、
C
クラスがありますB
クラスをし、A
クラスのすべてのプロパティとメソッド
サブクラスは あり 親 と 親の親クラス 内のすべてのパッケージの プロパティ と メソッドを
クラス動物: デフを食べる(自己): プリント(" 吃--- " ) デフ飲む(自己): プリント(" 喝--- " ) デフ実行します(自己): 印刷(" 跑--- " ) デフ睡眠(自己): プリント(" 睡--- " ) クラス・ドッグ(動物): デフ樹皮(自己): プリント(" 汪汪叫" ) クラスXiaoTianQuan(犬): デフフライ(セルフ): 印刷(" 私は飛ぶことができる" ) クラスキャット(動物): DEF キャッチ(セルフ): 印刷(" キャッチマウス" ) #は、神格化犬オブジェクトの作成 = XTQをXiaoTianQuan() )(xtq.fly を xtq.bark() xtq.eat() xtq.catch()
質問:神格化犬を 呼び出すことができる Cat
で定義されたクラス catch
の道を?
回答:できませんので、 神格化犬 や Cat
ない間の 継承 関係。
書き換えの1.2メソッド
- サブクラスは 持っている 親クラス のすべて のメソッド と プロパティを
- サブクラスが から継承 親クラス、あなたが直接することができます 楽しむ 親クラスのメソッドは、再び開発する必要がパッケージ化されています
シナリオ
- 場合 、親クラス メソッドの実装はサブクラスのニーズを満たすことができない場合、この方法は、することができる (オーバーライド)を書き換え
オーバーライド 親クラスのメソッドを2つのケースがあります。
- カバー 親クラスのメソッドを
- 親クラスのメソッドを 拡張します
1)親クラスのメソッドをカバー
- 開発中の場合は、親クラスの実装 および サブクラス実装、完全に異なります
- 使用することができます カバーするために 、方法をサブクラスに 書き換えること 、親クラスの実装を
特定の実装では、同等の サブクラスは 定義 親クラスと実装として、同じ名前を
実行時に、書き換えた後、ちょうど呼び出し 、サブクラスのメソッドを書き換え、もはや呼ばないだろう 親クラスのパッケージを
class Animal: def eat(self): print("吃---") def drink(self): print("喝---") def run(self): print("跑---") def sleep(self): print("睡---") class Dog(Animal): def bark(self): print("汪汪叫") class XiaoTianQuan(Dog): def fly(self): print("我会飞") def bark(self): print("叫得跟神一样...") xtq = XiaoTianQuan() # 如果子类中,重写了父类的方法 # 在使用子类对象调用方法时,会调用子类中重写的方法 xtq.bark()