Python で親クラスのスーパーコンストラクターを呼び出す

Vaibhav Vaibhav 2022年4月12日
Python で親クラスのスーパーコンストラクターを呼び出す

継承は、コンピュータサイエンスにおけるオブジェクト指向プログラミングの強力な概念であり、冗長なコードの記述を回避し、プログラミングの黄金の DRY (Don't repeat yourself)ルールにうまく適合します。継承を使用すると、クラスは別のクラスのすべてのプロパティと関数を継承できます。機能が継承されるクラスは親クラスであり、機能を継承するクラスは子クラスです。

継承は、プログラマーと開発者がスケーラブルで再利用可能で保守可能なコードを作成するのに役立ち、生産性と効率を向上させます。

すべての属性とメソッドを継承するには、子クラスから親クラスのコンストラクターを実行する必要があります。この記事では、Python で親クラスのスーパーコンストラクターを呼び出す方法を学習します。

Python で親クラスのスーパーコンストラクターを呼び出す

親クラスのコンストラクターまたはスーパーコンストラクターは、子クラスのコンストラクターで呼び出されます。同じ構文は次のとおりです。

super().__init__(*args, **kwargs)

親クラスに必要なすべての引数は、__init__() メソッド内で渡されます。上記の構文では、*args, **kwargs がすべての引数をカバーしていますが、次のようにすべての引数を個別に言及することもできます。

super().__init__(argument1, argument2, argument3, ...)

理論が終わったので、概念を実際に理解しましょう。継承の概念とスーパーコンストラクターを呼び出す方法を理解するには、次の Python コードを参照してください。

class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    def get_name(self):
        return self.name

    def set_name(self, name):
        if isinstance(name, str):
            self.name = name

    def get_age(self):
        return self.age

    def set_age(self, age):
        if isinstance(age, int):
            self.age = age

    def get_gender(self):
        return self.gender

    def set_gender(self, gender):
        if isinstance(gender, str):
            self.gender = gender


class Student(Person):
    def __init__(self, name, age, gender, roll_number):
        super().__init__(name, age, gender)  # Important
        self.roll_number = roll_number

    def get_roll_number(self):
        return self.roll_number

    def set_roll_number(self, roll_number):
        if isinstance(roll_number, int):
            self.roll_number = roll_number


adam = Student("Adam", 21, "M", 5)
emma = Student("Emma", 23, "F", 18)
print("Name:", adam.get_name())
print("Age:", adam.get_age())
print("Gender:", adam.get_gender())
print("Roll Number:", adam.get_roll_number())
print()
print("Name:", emma.get_name())
print("Age:", emma.get_age())
print("Gender:", emma.get_gender())
print("Roll Number:", emma.get_roll_number())

出力:

Name: Adam
Age: 21
Gender: M
Roll Number: 5

Name: Emma
Age: 23
Gender: F
Roll Number: 18

Person クラスは親クラスであり、Student クラスは子クラスです。親クラスと子クラスには、そのすべての属性に対してセッターとゲッターがあります。子クラスは、親クラスのすべての属性とメソッドを継承します。このステートメント super().__init__(name, age, gender) は、Person クラスのコンストラクターを呼び出しました。親クラスのコンストラクターを呼び出す必要があることに注意してください。そうしないと、コードが壊れます。

著者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

関連記事 - Python Class