受け継ぎます
何継承されています
継承はPythonで、新しいクラスを作成する方法である、新しいクラスは、一つ以上の親クラス、親クラスを継承することができ、基本クラスまたはスーパークラスと呼ばれることができ、新しいクラスを派生クラスまたはサブクラスと呼ばれています
手順では、サブクラスと呼ばれ、例えば、Bの連続は、Bが既存のメソッドとプロパティで直接使用することができ、クラス間の継承関係に記載され、Bは親クラスと呼ばれ、基底クラスと呼ばれます
なぜ使用の継承
当事者が直接の当事者は、いくつかのものを持って継承を使用することができ、その目的は、既存のコードを再利用することで継承されて再利用性を改善されました
継承を使用する方法
構文:
クラスのクラス名(親クラスの名前):
コンテンツクラス
Pythonでは、サブクラスは、同時に親クラスの複数の継承します
クラスベース: DESC =は「これは、基本クラスである」 DEF :show_info(セルフ) 印刷(self.desc) DEFのmake_money(セルフ): 印刷(「一日億...稼ぐ」) #は、親クラスのビットベースの指定 クラスのサブクラスを(ベース): 合格 OBJ = サブクラス() #何もクラスが親クラス内の既存のコンテンツを使用することができたとしても (obj.make_money) 印刷(obj.desc)
要約:明確ではない、特定のではありません
プロセスサブクラスの複数の同じ部分、抽出、新しいクラスを形成し、また、抽象として知られているプロセス
継承の適切な使用:
1.最初に抽象して、継承
2.本来の機能を拡張または変更、既存のクラスを継承しました
#教師と生徒の同じ部分を抽出するには、クラスpersonフォーム クラスに人を: DEF __init__ (セルフ、名前、年齢、性別): self.name = 名前 self.age = 年齢 self.gender = 性別 DEF (自己を)say_hi: 印刷(" 名:%S、性別:%S、年齢:%S "%(self.name、self.gender、self.age)) クラスの先生(人): DEF ティーチング(セルフ): 印刷(「教師が生徒を教えます、コードを書く.... " ) T1 =教師(" ジャック" " 男性 "20 ) t1.say_hi() クラスの 学生(人物): 合格 STU1 =学生(" ローズ" " 女性」、18 ) stu1.say_hiを()
物件検索順序
クラスA: テスト = ' 母' クラスB(A): テスト = ' heiheiが' 通過 B = B() b.test = ' 西渓' プリント(b.test)を
オブジェクト自体は>>親クラスを見つけるために>親クラス>オブジェクトの親クラスであります
派生
サブクラスは異なるコンテンツの親クラスで発生した場合、それは派生クラスと呼ばれるサブクラス化
通常、サブクラスは、いくつかの新しいコードを記述します、と親は通常クラスを派生している、正確に同じにすることはできません
だから、派生クラスは、サブクラスを参照します
クラスの人: DEF say_hi(自己): 印刷(" こんにちは" ) クラスの学生(人): デフsay_hi(自己): 印刷(" !こんにちは世界" ) STU = 学生() stu.say_hi()
網羅
また、書き換え可能としても知られている(上書き)
サブカテゴリーは、親クラスのプロパティやメソッドの名前と完全に一致した場合に表示され
「」「 要件:要素タイプのリストクラス制限することができる達成 」「」 クラスマイリスト(リスト): DEF __init__ (セルフ、ELEMENT_TYPE): スーパー()__init__() #の初期化メソッドは、基本的に達成するために、親クラスと呼ばれています初期化 self.element_type = element_typen DEF アペンド(セルフ、オブジェクトは): 「」「 :のparamオブジェクト:要素を格納するために :リターン:なし 」「」 IFタイプ(オブジェクト)の== self.element_type: #私たちはここに訪問する必要があります実際の記憶動作を達成するために、親クラスを追加し 、スーパー(マイリスト、セルフ).append(Object)を 、他: 印刷("申し訳ありませんが、タイプのあなたの要素は、S%ではありません"%self.element_typen) #要素型が格納されるように指定されている作成 メートル= マイリスト(INT) #そして、物事をどうするか、あなたは需要がある場合、オブジェクトを作成する必要があります初期化方法考え m.append( 1 ) プリント(M [0]) m.append(' 12345 ')
親クラスのコンテンツへのアクセスをサブクラス化
構文:
モード1:プロパティまたはメソッドのスーパー(現在のクラス名、自己)あなたは親クラスを調整したいです。
実施例2:チューニングする方法プロパティまたはスーパー()あなたの親クラス。
モード3:チューン(自己)#3にしたい親クラスのプロパティやメソッドのクラス名は、道の継承とは何の関係もありません。
******:
既存のクラスを継承し、あなたが親クラスのinitメソッドをオーバーライドするときは、必要なパラメータの親クラスに渡して、初期化メソッドの最初の行の親クラスの初期化メソッドを呼び出す必要があります
class Parent: text = "abc" def say_something(self): print("anything") class Sub(Parent): def show_info(self): # print(super(Sub,self).text) # super(Sub,self).say_something() # 访问方式2 py3的新语法 最常用的方式 print(super().text) super().say_something() #方式3 直接指定类名调用 # print(Parent.text) # Parent.say_something(self) sub = Sub() sub.show_info()
组合
也是一种关系,描述两个对象之间,是什么有什么的关系
例如,学生有手机,游戏中角色拥有某些装备
将一个对象作为另一个对象的属性(即什么有什么)
组合的目的:也是为了重用现有代码
什么时候用继承:分析两个类的关系,到底是不是:什么是什么的关系
什么时候用组合:如果两个类之间,没有太大的关系,完全不属于同类
另外组合相比继承,耦合度更低了
新式类与经典类
python3中任何类都是直接或间接继承了Object
新式类:任何显示或隐式的继承自object的类就称之为新式类,python3中全都是新式类
经典类:不是object的子类,仅在python2中出现
当出现菱形继承时,新式类先深度继承,当遇到了共同父类时就广度继承
新式类就是深度优先