Pythonの継承
Pythonの継承
継承により、別のクラスからすべてのメソッドとプロパティを継承するクラスを定義できます。
親クラスは継承元のクラスであり、基底クラスとも呼ばれます。
子クラスは、別のクラスを継承するクラスであり、派生クラスとも呼ばれます。
親クラスを作成する
どのクラスも親クラスになることができるため、構文は他のクラスを作成する場合と同じです。
例
firstname
プロパティとlastname
プロパティ、およびprintname
メソッドを備えたPerson
という名前のクラスを作成します。
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
# Personクラスを使用してオブジェクトを作成し、printnameメソッドを実行します。
x = Person("ジョン", "ドゥ")
x.printname()
子クラスを作成する
別のクラスから機能を継承するクラスを作成するには、子クラスを作成時に親クラスをパラメーターとして送信します。
例
Student
という名前のクラスを作成します。このクラスは、Person
クラスからプロパティとメソッドを継承します。
class Student(Person):
pass
注意:他のプロパティやメソッドをクラスに追加したくない場合は、pass
キーワードを使用します。
__init__()関数を追加する
ここまでで、親からプロパティとメソッドを継承する子クラスを作成しました。
(pass キーワードの代わりに)__init__()
関数を子クラスに追加したいと考えています。
注意:__init__()
関数は、クラスが新しいオブジェクトの作成に使用されるたびに自動的に呼び出されます。
例
__init__()関数をStudentクラスに追加します。
class Student(Person):
def __init__(self, fname, lname):
#プロパティなどを追加する
__init__()
関数を追加すると、子クラスは親の__init__()
関数を継承しなくなります。
注意:子の__init__()
関数は、親の__init__()
関数の継承をオーバーライドします。
__init__()
関数の継承を維持するには、親の__init__()
関数への呼び出しを追加します。
これで、__init__()
関数が正常に追加され、親クラスの継承が維持されたので、__init__()
関数に機能を追加する準備が整いました。
super()関数を使用する
Python には、子クラスに親からすべてのメソッドとプロパティを継承させるsuper()
関数もあります。
super()
関数を使用すると、親要素の名前を使用する必要がなく、親要素からメソッドとプロパティが自動的に継承されます。
プロパティを追加
例
graduationyear
というプロパティを Student
クラスに追加します。
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
self.graduationyear = 2019
以下の例では、2019
年を変数にし、Student
オブジェクトの作成時にStudent
クラスに渡す必要があります。これを行うには、__init__()関数に別のパラメーターを追加します。
例
year
パラメータを追加し、オブジェクトの作成時に正しい年を渡します。
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear = year
x = Student("マイク", "オルセン", 2019)
メソッドを追加
例
welcome
というメソッドをStudent
クラスに追加します。
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear = year
def welcome(self):
print("Welcome", self.firstname, self.lastname, "to the class of", self.graduationyear)
親クラスの関数と同じ名前のメソッドを子クラスに追加すると、親メソッドの継承はオーバーライドされます。
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。