ホームページ > バックエンド開発 > Python チュートリアル > Python の継承: `super()` 呼び出しと明示的なスーパークラス `__init__()` 呼び出しの違いは何ですか?

Python の継承: `super()` 呼び出しと明示的なスーパークラス `__init__()` 呼び出しの違いは何ですか?

Linda Hamilton
リリース: 2024-12-13 09:09:13
オリジナル
811 人が閲覧しました

Python Inheritance: What's the Difference Between `super()` and Explicit Superclass `__init__()` Calls?

'super' と明示的スーパークラス __init__() の違いは何ですか?

Python では、super キーワードを使用すると便利な方法が提供されます。親クラスのメソッドにアクセスします。その使用法を調べて、親の __init__ メソッドを呼び出す明示的な方法と対比してみましょう。

明示的な親クラスの初期化

class Child(SomeBaseClass):
    def __init__(self):
        SomeBaseClass.__init__(self)
ログイン後にコピー

この形式の継承では、明示的に親クラス SomeBaseClass の __init__ メソッド。子クラスをその特定の親に緊密に結合し、親の __init__ メソッドが常に存在すると想定します。

'super' 初期化

class Child(SomeBaseClass):
    def __init__(self):
        super().__init__()
ログイン後にコピー

super キーワードにより、次のことが可能になります。より柔軟な初期化プロセスを実現します。これにより、メソッド解決順序 (MRO) で子クラスの後に続く親クラスの __init__ メソッドが確実に呼び出されます。これにより、子の初期化に影響を与えることなく、複数の継承や基本クラスの追加が可能になります。

Python 2 と Python 3

Python 2 では、 super の使用は異なります:

super(Child, self).__init__()
ログイン後にコピー

ただし、Python 3 では、これは次のようになります。簡略化すると次のようになります。

super().__init__()
ログイン後にコピー

「super」を使用する利点

  • 上位互換性: super を使用すると、クラスの変更が可能になります。互換性を損なうことのない階層。
  • 依存関係injection: サブクラスを通じて初期化プロセスに追加機能を注入できるようになります。

結論

明示的な SomeBaseClass.__init__(self) ) 呼び出しは、単純な継承シナリオでは十分ですが、より複雑なクラス階層では制限になる可能性があります。 super キーワードは、柔軟性、上位互換性、および依存関係の挿入のサポートを提供します。したがって、コードの保守性と再利用性が向上するため、親クラスの初期化には super を使用することをお勧めします。

以上がPython の継承: `super()` 呼び出しと明示的なスーパークラス `__init__()` 呼び出しの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート