ホームページ >バックエンド開発 >Python チュートリアル >多重継承で親クラスの __init__ メソッドを適切に呼び出すにはどうすればよいですか?

多重継承で親クラスの __init__ メソッドを適切に呼び出すにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-01 05:36:10444ブラウズ

How Do I Properly Call Parent Class `__init__` Methods in Multiple Inheritance?

多重継承を使用した親クラス init の呼び出し

多重継承が使用されるシナリオでは、次のことを確認することが重要です。すべての親クラスのコンストラクターが呼び出されます。一般的な 2 つのアプローチは次のとおりです。

  • ParentClass.__init__(self) (古いスタイル)
  • super(DerivedClass, self).__init__() (新しいスタイル)

ただし、親クラスが一貫した規則に従っていない場合、これらのアプローチは失敗する可能性があります。

正しいアプローチの決定

適切なアプローチは、基本クラスが複数のクラス向けに設計されているかどうかによって異なります。継承:

1.スタンドアロン基本クラス

  • 多重継承用に設計されていません。
  • 次のいずれかを使用して各親コンストラクターを手動で呼び出します。

    • スーパーなし: Foo.__init__(self), Bar.__init__(self)
    • スーパー付き: super().__init__() (Foo までのすべてのコンストラクター用)、super(Foo, self).__init__(bar) (以降のすべてのコンストラクターふー)

2.ミックスイン

  • 多重継承用に設計されています。
  • ミックスイン クラスで super().__init__() を使用します。これにより、次のコンストラクターが自動的に呼び出されます。
  • 最初にミックスインから継承します (例: class FooBar(FooMixin,バー)。

3.協調継承用に設計されたクラス

  • ミックスインに似ていますが、すべての引数はキーワード引数として渡されます。
  • すべてのクラスで super().__init__() を呼び出します。
  • 基本クラスの順序は異なりますmatter.

追加の考慮事項

  • オブジェクトのサブクラスの場合は、super().__init__() の呼び出しを避けてください。
  • スタンドアロンの場合クラスでは、オブジェクトから直接継承する場合は常に空のコンストラクターを提供します (例: class Base(object): def) __init__(self): pass).

最終的には、正しい実装は関係するクラスによって異なります。クラスが多重継承用に設計されている場合は、それに応じて文書化する必要があります。それ以外の場合は、そのようなシナリオ向けに設計されていないと想定してください。

以上が多重継承で親クラスの __init__ メソッドを適切に呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。