Menu
CoddyTech

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__ メソッドを呼び出すことや、親クラスの動作を拡張することが含まれます。

challenge icon

チャレンジ

中級

このチャレンジでは、継承を使用して 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()
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ