ホームページ >バックエンド開発 >Python チュートリアル >Python の「super()」は多重継承におけるメソッド呼び出しをどのように解決するのでしょうか?
多重継承が Python の super() の動作に与える影響
Python の多重継承により、メソッドの解決が複雑になります。 Python は、メソッド解決順序 (MRO) を決定して、super() によって呼び出される親メソッドを確立します。
この例では、Third は First と Second の両方から継承します。 super().__init__() が Third.__init__() で呼び出される場合、MRO は親クラスを左から右に評価するため、First.__init__() を参照します。 First は、継承チェーンの Second の前にリストされます。
Python は、MRO を構築するときに、継承リスト内のクラスの順序を優先します。したがって、次の例では、MRO は [Fourth, Second, Third, First, object]:
class First(object): def __init__(self): print("first") class Second(First): def __init__(self): print("second") class Third(First): def __init__(self): print("third") class Fourth(Second, Third): def __init__(self): super(Fourth, self).__init__() print("that's it")
このシナリオでは、Fourth は Second.__init__() の代わりに First.__init__() を呼び出します。 MRO では First が最初に検出されるためです。
ただし、継承順序がreversed:
class Third(Second, First): def __init__(self): print("third")
その後、MRO は [Third, Second, First, object] になり、Third は最初に Second.__init__() を呼び出します。
特に、Python は一貫した MRO を強制します。 。継承チェーンに矛盾がある場合、予期しない動作を防ぐために例外が発生します。
以上がPython の「super()」は多重継承におけるメソッド呼び出しをどのように解決するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。