工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Python

Python多重継承、多段継承、メソッド解決順序(MRO)マスター

Python多重継承

Pythonが如何に多重継承をサポートし、多段継承のニュアンス、メソッド解決順序(MRO)が属性検索をどう制御するかを探ります。

Python多重継承

Pythonではクラスが複数の基底クラスから継承可能で、C++と同様です。この機能は多重継承と呼ばれ、派生クラスが複数の親クラスから振る舞いを組み合わせられます。

構文は単一継承と同様:すべての親クラスをカンマ区切りで括弧内に列挙します。

例

class Base1: pass
class Base2: pass
class MultiDerived(Base1, Base2): pass

この例では、MultiDerivedがBase1とBase2の両方から属性とメソッドを継承します。

Python多重継承、多段継承、メソッド解決順序(MRO)マスター

図:MultiDerivedがBase1とBase2から機能を受け取る。

Python多段継承

2レベルを超えて継承を連鎖させることも可能:クラスが派生クラスから継承し、多段継承階層を形成。Pythonは任意の深度をサポートします。

各新派生クラスは直近の親から継承し、祖先の属性も引き継ぎます。

例:

class Base: pass
class Derived1(Base): pass
class Derived2(Derived1): pass

ここではDerived1がBaseを拡張し、Derived2がさらにDerived1を拡張し、3レベルの連鎖を形成します。

Python多重継承、多段継承、メソッド解決順序(MRO)マスター

Pythonにおけるメソッド解決順序(MRO)

すべてのPythonクラスは究極的にobject、普遍的基底型から継承します。したがってすべてのオブジェクトは組み込み・ユーザー定義問わずobjectのインスタンスです:

# 出力: True
print(issubclass(list, object))
# 出力: True
print(isinstance(5.5, object))
# 出力: True
print(isinstance("Hello", object))

多重継承が関与すると、Pythonは深さ優先・左から右への走査で属性を解決し、同じクラスを2度訪れません。この走査順序をメソッド解決順序(MRO)と呼び、クラスが親より前に現れることを保証します。

MultiDerivedのMROは:[MultiDerived, Base1, Base2, object]。__mro__属性またはmro()メソッドで確認可能:

MultiDerived.__mro__
# (<class '__main__.MultiDerived'>, <class '__main__.Base1'>, <class '__main__.Base2'>, <class 'object'>)
MultiDerived.mro()
# [<class '__main__.MultiDerived'>, <class '__main__.Base1'>, <class '__main__.Base2'>, <class 'object'>]

複雑な継承グラフも同じ原則に従います。以下の例を考慮:

Python多重継承、多段継承、メソッド解決順序(MRO)マスター
# MROのデモンストレーション
class X: pass
class Y: pass
class Z: pass
class A(X, Y): pass
class B(Y, Z): pass
class M(B, A, Z): pass
print(M.mro())
# 出力:
# [<class '__main__.M'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.X'>, <class '__main__.Y'>, <class '__main__.Z'>, <class 'object'>]

MROを計算するアルゴリズムの詳細については、公式Pythonドキュメントのクラス継承とMROに関する議論を参照。

Python

  1. C# 継承をマスターする:概念、種類、実践コード
  2. C#の継承:再利用可能で保守しやすいコードを構築する
  3. Python データ型マスター: 実践ガイド
  4. Python 演算子完全マスター: 包括的ガイド
  5. Python pass文完全マスター: 実践ガイド
  6. Python辞書完全ガイド:作成、操作、高度なテクニック
  7. Pythonカスタム例外マスター:実践ガイド
  8. Pythonオブジェクト指向プログラミング完全ガイド:クラス、継承、カプセル化、ポリモーフィズム
  9. Python継承マスター:概念、構文、実践例
  10. Python type()とisinstance()の理解:実例付き解説
  11. Pythonオブジェクト指向プログラミング完全ガイド:クラスと継承をマスター