super() 関数
CoddyのPythonジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 18/64。
super()関数を使うと、子クラスから親クラスのメソッドを呼び出せます。これにより、親クラスの機能を完全に置き換えるのではなく、拡張できます。
コンストラクターでsuper()を使用する例を次に示します。
class Animal:
def __init__(self, name):
self.name = name
print(f"Animal created: {name}")
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name) # 親の __init__ を呼び出す
self.breed = breed
print(f"Dog breed set: {breed}")犬のオブジェクトを作成します:
buddy = Dog("Buddy", "Golden Retriever")
print(f"Name: {buddy.name}, Breed: {buddy.breed}")出力:
Animal created: Buddy
Dog breed set: Golden Retriever
Name: Buddy, Breed: Golden Retriever親クラスのメソッドを拡張するには、super()を使用します:
class Animal:
def make_sound(self):
print("Generic animal sound")
class Dog(Animal):
def make_sound(self):
super().make_sound() # 親のメソッドを最初に呼び出す
print("Woof!") # 犬固有の振る舞いを追加する拡張されたメソッドを呼び出します:
buddy = Dog()
buddy.make_sound()出力:
Generic animal sound
Woof!super()がなければ、親クラスの機能を失うことになります:
class Cat(Animal):
def make_sound(self):
print("Meow!") # 猫の音だけ、親メソッドは無視
cat = Cat()
cat.make_sound()出力:
Meow!要点:子クラスから親クラスのメソッドを呼び出すには super() を使用します。これにより、機能を完全に置き換えるのではなく、拡張できます。一般的な用途には、親クラスの __init__ メソッドを呼び出すことや、親クラスの動作を拡張することが含まれます。
チャレンジ
中級このチャレンジでは、継承を使用して Person クラスと Employee クラスの階層を実装します。
person.py: name 属性と age 属性を持つ Person クラスが含まれていますemployee.py: Person を継承する Employee クラスが含まれていますdriver.py: 実装をテストするメインファイルです
各ファイルには、実装を進めるための詳細な TODO コメントが含まれています。
自分で試してみよう
# TODO: person.pyからPersonクラスをインポートする
# TODO: employee.pyからEmployeeクラスをインポートする
def main():
# TODO: 名前が"Alice"で年齢が30のPersonオブジェクトを作成する
person = None
# TODO: 名前が"Bob"、年齢が35、職業が"Developer"のEmployeeオブジェクトを作成する
employee = None
# TODO: Personオブジェクトのintroduce()メソッドを呼び出す
# Expected output: "Hi, I'm Alice and I'm 30 years old"
# TODO: 間隔のための空白行を出力する - print()
# TODO: Employeeオブジェクトのintroduce()メソッドを呼び出す
# 期待される出力:
# "Hi, I'm Bob and I'm 35 years old"
# "I work as a Developer"
if __name__ == "__main__":
main()このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ