何を継承していますか?
これは、サブクラスでは、クラス、クラス属性とメソッドを継承し、道の新しいタイプです
親クラスは、派生クラスは、サブクラスの基本クラスです
開発:開発ツールIDE:vscode、pycharm、sumlinetext
ジャワの開発:日食、MyEclipseが、アイデア
開発アンドリュース:+ ADT、Androidstudio日食:アイデア+ ADT改革に基づき、
新しいクラス:限り、オブジェクトは、クラスを継承する新しいクラスであるとして、のpython3は、デフォルトのオブジェクトクラスを継承し、python2は、私たちは、指定されたオブジェクトの継承を表示する必要があります
クラシック:オブジェクトのクラスを継承していない、古典的なカテゴリ、のpython3なしのクラシックは、Python2がでています
クラスA(オブジェクト):
パス
:クラスB(A)を
渡し
#Viewクラス名の
印刷(B .__ name__)
出力:B
#ビューの親
プリント(B .__ bases__)#Bのすべての親クラスの
出力(<クラスを__main __。A「>、)
第2のダイヤモンドプロパティの問題は見つけます:
人クラスの
学校= '北京大学の
クラスの先生(人):
DEF __init __(自己、名前、年齢、レベル)
self.name名=
self.age =年齢の
self.level =レベルの
クラスの学生(人):
DEF __init __(自己、名前、年齢、レベル)
self.name名=
self.age =年齢の
self.level =レベル
STU1学生=( 'bgon'、85、 "パイソン")#オブジェクトのインスタンス化
プリント(stu1.school)#学生のクラスをこのプロパティには、学校では、彼は親クラスで定義されていない
#出力です:北京大学
これが継承されている場合は、その質問は、親クラスのプロパティを再利用するための属性の順序であるものを見つけるために、だけでなく、親クラスのメソッドを再利用する方法をどのように、なっ?
最初===>エラー探してオブジェクト===>クラス探し===>親クラスを見つけ、それはあまりにも、親クラスに継承されたいくつかの、今日と同じではありません。私たちは、順序がオブジェクトを見つけることです前に言いましたつまり、多重継承は、それがどのように見つけることですか?
III。親クラスのメソッドを再利用
人クラスの
学校= '北京大学'
DEF __init __(自己、名前、年齢、レベル)
self.name名=
self.age =年齢の
self.level =レベルの
クラスの先生(人):
__init __(自己、名前、年齢、レベルDEF )
self.name名=
self.age =年齢の
self.level =レベルの
クラスの学生(人):
DEF __init __(自己、名前、年齢、クーゼ)
self.name名=
self.age =年齢
self.couse =クーゼ
STU1 =学生(「bgon」、85、 「パイソン」)#は、オブジェクトのインスタンス化
(stu1.school)#なし学校の生徒のクラスこの属性の印刷を、彼は親クラスで定義されています
上記の図から分かるように、継承、コードが冗長表示され、その後、私たちは親クラスの__init__メソッドを再利用する方法、のは、最初の方法を見てみましょう:命名名(継承とは何の関係)を使用して、
階級の人々
の学校= '北京大学の
デフ__init __(自己、名前、年齢、レベル)
self.name =名前
self.age =年齢
self.level =レベルの
クラスの先生(人):
デフ__init __(自己、氏名、年齢、レベル)
self.name =名前
self.age =年齢
self.level =レベルの
クラスの学生(人):
デフ__init __(自己、名前、年齢、クーゼ)
人.__のinit __(自己、年齢、名前)
self.couse =クーゼ
第二の方法:superキーワードによる
階級の人々
の学校= '北京大学の
デフ__init __(自己、名前、年齢、レベル)
self.name =名前
self.age =年齢
self.level =レベルの
クラスの先生(人):
デフ__init __(自己、氏名、年齢、レベル)
self.name =名前
self.age =年齢
self.level =レベルの
クラスの学生(人):
デフ__init __(自己、名前、年齢、クーゼ)
スーパー().__のinit __(名前、年齢)
self.couse =クーゼ
スーパー()は最初のパラメータ(自己を)渡す必要があり、オブジェクトを呼び出すための方法を結合、MROに従い、親オブジェクトのリストを取得し、そうだろうが__init __(名前、年齢)
人クラスの
学校= '北京大学'
DEF __init __(自己、名前、年齢)
self.name名=
self.age =アジェルの
クラスの先生(人):
渡し
クラスの学生(人を):
合格
STU1学生=( 'bgon'、85 )#オブジェクトのインスタンス
属性をしませんでした。この学校での印刷(stu1.school)#クラスの生徒を自分の親クラスで定義されています
クラスのインスタンスは自動的に、__init__を呼び出し、クラスではありません、親クラスを探しに行きました
多层继承: クラスA: = "AAAA"
パス クラスB(A): = "BBBB"が
通過 クラスC(B)が: = "CCCC"
パス クラスD(C): =「DDDDの
パス D = D() プリント(D、A) #输出为DDDD
多重継承:
クラスA:
= "AAAA"
パス
クラスB:
= "BBBB"は
合格
:クラスC
= "CCCC"
パス
クラスD(A、B、C):
=「DDDDが
通過
D = D()
印刷の(d 、A)
ときDは、B、Cに続いて値、最初のFind A、いないとき、それは?それとも、見ているあなた自身の最初のスタートを起動する方法である上記の検索順序
ダイヤモンド継承の問題(明示的に継承するクラスではなく、オブジェクトクラス):
新しいクラスと古典的なクラスを見つけるために同じではありませんが、検索順序の新しいタイプ(左から,,)(ダイヤモンド頂点を含まない頂点エンドダイヤモンドを見つけるために、幅優先見上げてきたが、次の承継に進みます)(菱形の頂点を含まない)ダイヤモンド形の頂点終わりを見つけるために見上げ父は、検索順序の古典は、深さ優先である)(左から,,(ダイヤモンド頂点を含む頂点最終的にはダイヤモンドを見つけるために見上げてきました)最後に検索し、幅を探しに行くために==>道路
クラスA(オブジェクト):
DEF試験(自己):
プリント( 'Aから')
、クラスB(A):
DEF試験(自己):
('B'から)印刷
クラスC(A):
DEF試験(自己):
印刷( 'C'から)
クラスD(B):
DEF試験(自己):
プリント( 'D'から)
クラスE(C):
DEF試験(自己):
プリント(E 'から')
クラスF(D、 E):
#1 DEFテスト(自己):
()'Fから' #印刷
パス
)F1 F =(
f1.test()
この属性は唯一の新しい線形リストビューを持つことができます。#印刷(F .__ mro__)、古典的ではありませんこのプロパティは、リスト見つけるMROで超厳密に従っている
F-> D-> B-> E-> C->:連続の#新しいクラス順
承継の#古典的な順序:F-> D-> B-> A- > Eを- >Cの
#は、統一のpython3の新しいクラスであります
クラシックのCaifen新しいクラスの#Pyhon2
すべてが継承する一般的な目的があることを、ダイヤモンドの問題と呼ばれるトップの親、あります