I CSDNブログコラム:HTTPS://blog.csdn.net/yty_7
Githubの住所ます。https://github.com/yot777/Python-Primary-Learning
8.5 多重継承とスーパー機能
スーパー機能は、前に親クラスのメソッド呼び出しの役割を発生しています。単一継承、理解しやすいですが、私たちは、特に時間の「ダイヤモンドの継承」に、注意を払う必要が多重継承。
Pythonの多重継承の例(親クラス名を使用して):
class Base:
def __init__(self):
print('This is Base init function')
#A单继承自Base类
class A(Base):
def __init__(self):
Base.__init__(self)
print('This is init function of A')
#B单继承自Base类
class B(Base):
def __init__(self):
Base.__init__(self)
print('This is init function of B')
#C多继承自A类和B类
class C(A,B):
def __init__(self):
A.__init__(self)
B.__init__(self)
print('This is init function of C')
#实例化一个C类的对象c
c = C()
运行结果:
This is Base init function
This is init function of A
This is Base init function
This is init function of B
This is init function of C
Pythonの多重継承の例(使用してスーパー機能):
class Base:
def __init__(self):
print('This is Base init function')
#A单继承自Base类
class A(Base):
def __init__(self):
super().__init__()
print('This is init function of A')
#B单继承自Base类
class B(Base):
def __init__(self):
super().__init__()
print('This is init function of B')
#C多继承自A类和B类
class C(A,B):
def __init__(self):
super().__init__()
print('This is init function of C')
#实例化一个C类的对象c
c = C()
运行结果:
This is Base init function
This is init function of B
This is init function of A
This is init function of C
同じことがあるC から多重継承クラスとBの使用なぜ、クラスのスーパー機能の実行結果が同じではないのですか?これは理解関係のPythonにMROの原則(:メソッド解決順序メソッド解決順序を)。それぞれが定義されたクラスに向け、Pythonは計算しますMROのリストを。
使用せずに、スーパー時間関数を、各クラスに一つだけの親クラスに配置されています
C → A → ベース、C → B → 基本メソッド呼び出し、逆
ベース→ A → C 、ベース→ B → C (ベースコール2回)
使用するスーパー:あなたがアップし、すべてのクラスのルートクラスを見つけるまで、すべての基底クラスの右トラバーサル左から、時間関数を配置C → A → B → ベースを
【ていないからA 点に直接クラスベース、そうでなければ見逃しBのクラス]
そして、逆のメソッドを呼び出します。
ベース→ B → A → C (塩基呼び出し回のみ)
リファレンスチュートリアル:
Pythonのチュートリアルの遼雪峰
https://www.liaoxuefeng.com/wiki/1016959663602400
遼雪峰のJavaチュートリアル
https://www.liaoxuefeng.com/wiki/1252599548343744
python3チュートリアル|チュートリアル新人
https://www.runoob.com/python3/
あなたはBenpianの章では、歓迎の注意をあなたを助けていると感じた場合は、コメント、親指アップ!Githubのは、あなたが、スターをフォロー歓迎します!