継承の基本
CoddyのPythonジャーニー「Object Oriented Programming」セクションの一部 — レッスン 17/64。
継承は、あるクラスが別のクラスから属性やメソッドを継承することを可能にし、親子関係を作成します。
親クラスの例を次に示します:
class Animal:
def __init__(self, name):
self.name = name
def info(self):
print(f"I am {self.name}, an animal")親クラスから継承する子クラスを作成します:
class Dog(Animal):
pass # Animalからすべてを継承します構文 class Dog(Animal): は、DogがAnimalを継承していることを意味します。親クラス名を括弧内に記述します。
両方のクラスからオブジェクトを作成します:
generic_animal = Animal("Creature")
buddy = Dog("Buddy")継承されたメソッドを使用します:
generic_animal.info()
buddy.info()出力:
I am Creature, an animal
I am Buddy, an animalDog は __init__ や info を定義していませんが、Animal から自動的にそれらを引き継ぎます。
子クラスに新しいメソッドを追加できます:
class Dog(Animal):
def bark(self):
print(f"{self.name} says Woof!")
buddy = Dog("Buddy")
buddy.info() # 継承されたメソッド
buddy.bark() # 新しいメソッド出力:
I am Buddy, an animal
Buddy says Woof!重要ポイント: 子クラスは、親クラスからすべての属性とメソッドを継承します。継承を作成するには、class Child(Parent): 構文を使用します。これにより、コードを再利用し、論理的なクラス階層を作成するのに役立ちます。
チャレンジ
中級vehicle.py: 親クラスであるVehicleクラスが含まれていますcar.py:Vehicleを継承するCarクラスが含まれていますdriver.py: 実装をテストするためのメインファイルです
各ファイルには、実装をガイドするための詳細な TODO コメントが含まれています。以下の作業を行う必要があります:
makeとmodel属性を持つVehicleクラスを完成させるCarクラスで適切なクラス継承を実装する- ファイル間で正しいインポート文を設定する
- driver ファイルでオブジェクトを作成し、テストする
TODO コメントは解決策へのステップバイステップのガイダンスを提供しているため、注意深く従ってください。
チートシート
継承を使用すると、class Child(Parent): 構文を使用して、あるクラスが別のクラスから属性とメソッドを継承できます。
class Animal:
def __init__(self, name):
self.name = name
def info(self):
print(f"I am {self.name}, an animal")
class Dog(Animal):
pass # Animalからすべてを継承します子クラスは、親のすべてのメソッドと属性を自動的に継承します。
buddy = Dog("Buddy")
buddy.info() # 継承されたメソッドを使用します
# Output: I am Buddy, an animal継承された機能を維持しながら、子クラスに新しいメソッドを追加します。
class Dog(Animal):
def bark(self):
print(f"{self.name} says Woof!")
buddy = Dog("Buddy")
buddy.info() # 継承されたメソッド
buddy.bark() # 新しいメソッド自分で試してみよう
# TODO: vehicle.pyからVehicleクラスをインポートする
# TODO: car.pyからCarクラスをインポートする
# TODO: メーカーが"Toyota"、モデルが"Corolla"のVehicleオブジェクトを作成する
vehicle = None
# TODO: メーカーが"Honda"、モデルが"Civic"のCarオブジェクトを作成する
car = None
# TODO: vehicleオブジェクトのdisplay_info()メソッドを呼び出す
# 期待される出力: "Vehicle: Toyota Corolla"
# TODO: carオブジェクトのdisplay_info()メソッドを呼び出す
# 期待される出力: "Vehicle: Honda Civic"
# 注: Carは変更なしでVehicleからdisplay_infoを継承しますこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。