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
クラスのコンストラクターを呼び出しました。親クラスのコンストラクターを呼び出す必要があることに注意してください。そうしないと、コードが壊れます。