Python OOP の継承: 親クラスと子クラス
Python OOP の継承について学びます。サブクラス化、メソッドのオーバーライド、super() の使用、および複数の継承パターンをマスターします。
概要
継承はオブジェクト指向プログラミング (OOP) の基礎となる柱の 1 つです。これは、新しいクラス (子クラスまたはサブクラスと呼ばれる) が既存のクラス (親クラスまたはスーパークラスと呼ばれる) の属性とメソッドを採用できるようにするメカニズムです。この設計パターンにより、コードの再利用が促進され、冗長性が削減され、アプリケーションのさまざまなコンポーネント間に論理的な階層関係が確立されます。
Python で継承を実装するには、子クラスの定義中に親クラス名を括弧内に渡します: `class Child(Parent):`。子クラスは、親のすべてのメソッドと変数を直ちに継承します。子にカスタム動作が必要な場合は、同じ名前で再定義することで親メソッドをオーバーライドできます。オーバーライドされたメソッド内でも、組み込みの `super()` 関数を使用して親の実装を呼び出すことができ、既存のロジックを完全に置き換えるのではなく、確実に拡張できます。
多くの静的型付け言語とは異なり、Python は多重継承をネイティブにサポートしています。これは、子クラスが複数の親クラスから継承できることを意味します (例: 「class SmartDevice(Camera, Phone):」)。名前が競合した場合にどの親メソッドが実行されるかを解決するために、Python はメソッド解決順序 (MRO) と呼ばれる厳密なアルゴリズムを使用します。継承ツリーを構造化し、super() を使用する方法を理解することは、拡張可能なオブジェクト指向アーキテクチャを設計するために重要です。
コードと実行の出力
super() を使用して初期化をオーバーライドする親 Vehicle クラスと子 Car サブクラスを作成します。
class Vehicle:
def __init__(self, brand, year):
self.brand = brand
self.year = year
def display_info(self):
return f"{self.year} {self.brand}"
class Car(Vehicle):
def __init__(self, brand, year, model):
# Call parent constructor
super().__init__(brand, year)
self.model = model
def display_info(self):
# Override parent method and extend it
parent_info = super().display_info()
return f"{parent_info} {self.model}"
my_car = Car("Ford", 2026, "Mustang")
print(my_car.display_info())2026 Ford Mustang段階的な実装
- Exception を継承するカスタム例外クラスの作成
- 汎用ビューから継承した UI コンポーネント (ボタンなど) の構築
- 階層型データベース モデルの定義 (例: ユーザー、従業員、マネージャー)
よくある質問
super() はサブクラス化で何をしますか?
super() は親クラスの一時オブジェクトを返し、そのメソッドを呼び出すことができます。これは、__init__ で親フィールドを初期化する場合に特に便利です。
クラスが継承されないようにすることはできますか?
Python は、Java のような継承を制限するための 'final' キーワードをサポートしていません。従来、クラスの意図を文書化するか、型付けモジュールからの @final アノテーションを備えた型チェッカーを使用します。
関連トピック
推奨される Python リソース
関連するインタラクティブなチュートリアル、チートシート、コード比較で知識を深めてください。
Python でリストを並べ替える方法
sort() メソッドとsorted() 関数を使用して、Python でリストを並べ替える方法を学びます。カスタムキーの並べ替えと逆順の例をご覧ください。
Python 文字列メソッドのチートシート
Python 文字列操作の完全なリファレンス ガイド。文字列プロパティの書式設定、検索、分割、置換、チェックをマスターします。
Python と JavaScript: どちらのプログラミング言語が最適ですか?
Python と JavaScript の包括的な比較。構文の違い、パフォーマンス、使用例 (バックエンドとフロントエンド)、およびコーディング例を調べます。