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

Python 多重継承

Python 多重継承

このチュートリアルでは、Python の多重継承と、それをプログラムで使用する方法について学習します。マルチレベル継承とメソッド解決順序についても学びます。

Python の多重継承

C++ と同様に、Python では複数の基本クラスからクラスを派生させることができます。これは多重継承と呼ばれます。

多重継承では、すべての基本クラスの機能が派生クラスに継承されます。多重継承の構文は単一継承に似ています。

class Base1:
    pass

class Base2:
    pass

class MultiDerived(Base1, Base2):
    pass

ここで、MultiDerived クラスは Base1 から派生します と Base2 クラス。

<図>

MultiDerived クラスは両方の Base1 から継承します と Base2 クラス。


Python マルチレベル継承

派生クラスから継承することもできます。これをマルチレベル継承と呼びます。 Python では任意の深さにすることができます。

マルチレベル継承では、基本クラスと派生クラスの機能が新しい派生クラスに継承されます。

対応する視覚化の例を以下に示します。

class Base:
    pass

class Derived1(Base):
    pass

class Derived2(Derived1):
    pass

ここでは、Derived1 クラスは Base から派生します クラス、および Derived2 クラスは Derived1 から派生しています クラス。

<図>

Python でのメソッド解決の順序

Python のすべてのクラスは object から派生しています クラス。 Python の最も基本的な型です。

したがって、技術的には、組み込みまたはユーザー定義の他のすべてのクラスは派生クラスであり、すべてのオブジェクトは object のインスタンスです クラス。

# Output: True
print(issubclass(list,object))

# Output: True
print(isinstance(5.5,object))

# Output: True
print(isinstance("Hello",object))

多重継承のシナリオでは、指定された属性が現在のクラスで最初に検索されます。見つからない場合、同じクラスを 2 回検索することなく、深さ優先、左から右の方法で親クラスに検索を続けます。

したがって、上記の MultiDerived の例では クラスの検索順序は [MultiDerived] です 、 Base1Base2object ]。この順序は MultiDerived の線形化とも呼ばれます クラスであり、この順序を見つけるために使用される一連のルールは メソッド解決順序 (MRO) と呼ばれます .

MRO は、ローカルの優先順位付けを防止し、単調性も提供する必要があります。クラスが常にその親の前に表示されるようにします。複数の親の場合、順序は基本クラスのタプルと同じです。

クラスの MRO は __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'>]

これは、もう少し複雑な多重継承の例と、MRO を使用したその視覚化です。

<図>
# Demonstration of 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

# Output:
# [<class '__main__.M'>, <class '__main__.B'>,
#  <class '__main__.A'>, <class '__main__.X'>,
#  <class '__main__.Y'>, <class '__main__.Z'>,
#  <class 'object'>]

print(M.mro())

出力

[<class '__main__.M'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.X'>, <class '__main__.Y'>, <class '__main__.Z'>, <class 'object'>]

MRO の計算方法に関する実際のアルゴリズムを知るには、MRO に関するディスカッションをご覧ください。


Python

  1. C# 継承
  2. Python データ型
  3. Python 演算子
  4. Python pass ステートメント
  5. Python 辞書
  6. Python カスタム例外
  7. Python オブジェクト指向プログラミング
  8. Python の継承
  9. Python の type() と isinstance() と例
  10. C# - 継承
  11. Python-オブジェクト指向