Python 継承

Note: 継承を使うことで、他のクラスからすべてのメソッドとプロパティを継承するクラスを定義することができます。

Python 継承

継承を使うことで、他のクラスからすべてのメソッドとプロパティを継承するクラスを定義することができます。

親クラスは継承元のクラスであり、ベースクラスとも呼ばれます。

子クラスは他のクラスから継承されるクラスであり、派生クラスとも呼ばれます。

親クラスの作成

どんなクラスでも親クラスになれるため、構文は他のクラスを作成する場合と同じです:

class Person:
  def __init__(self, fname, lname):
    self.firstname = fname
    self.lastname = lname

  def printname(self):
    print(self.firstname, self.lastname)

Person クラスを使用してオブジェクトを作成し、その後 printname メソッドを実行します:

子クラスの作成

他のクラスから機能を継承するクラスを作成するには、子クラスを作成するときに親クラスをパラメータとして渡します:

class Student(Person):
  pass

Note: クラスに他のプロパティやメソッドを追加したくない場合は、pass キーワードを使用します。

これで Student クラスは Person クラスと同じプロパティとメソッドを持ちます。

x = Student("Mike", "Olsen")
x.printname()

__init__() 関数の追加

これまでに親からプロパティやメソッドを継承する子クラスを作成しました。

子クラスに親の __init__() 関数を追加したいと考えています(pass キーワードではなく)。

Note: __init__() 関数は、新しいオブジェクトを作成するたびに自動的に呼び出されます。

class Student(Person):
  def __init__(self, fname, lname):
    # プロパティなどを追加します。

親の __init__() 関数の継承を保持したい場合は、親の __init__() 関数を呼び出します:

class Student(Person):
  def __init__(self, fname, lname):
    Person.__init__(self, fname, lname)

これで __init__() 関数が追加され、親クラスの継承が成功し、__init__() 関数の機能拡張に備える準備が整いました。

super() 関数の使用

Pythonには super() 関数もあり、子クラスが親からすべてのメソッドとプロパティを継承するようにします:

class Student(Person):
  def __init__(self, fname, lname):
    super().__init__(fname, lname)

super() 関数を使用すると、親要素の名前を使用する必要はなく、自動的にメソッドとプロパティを継承します。

プロパティの追加

次に、Student クラスに graduationyear というプロパティを追加します:

class Student(Person):
  def __init__(self, fname, lname):
    super().__init__(fname, lname)
    self.graduationyear = 2019

次の例では、年を表す2019は変数として、Student クラスを作成するときに渡されるべきです。これを行うには、__init__() 関数に別のパラメータを追加します:

class Student(Person):
  def __init__(self, fname, lname, year):
    super().__init__(fname, lname)
    self.graduationyear = year

x = Student("Mike", "Olsen", 2019)

メソッドの追加

Student クラスに welcome というメソッドを追加します:

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)

子クラスで親クラスの関数と同じ名前のメソッドを追加すると、親メソッドの継承が上書きされます。