1. TOP
  2. プログラム
  3. ソフト
  4. python
  5. メソッドのsuper

メソッドのsuper

親への支援要請

子クラスが親メソッドを呼び出したいとき、super()を使う
class Person():
def __init__(self, name)
self.name = name

class EmailPerson(Person):
def __init__(self, name, email):
super().__init__(name)
self.email = email

サブクラスのために__init__()メソッドを定義するということは、
親クラスの__init__()メソッドを置き換えようとしている。親クラス
バージョンはもう自動的に呼び出されなくなる。そのため、 親クラス
バージョンを呼び出すためには、明示的に呼び出しを行う必要がある。
ここで行われていることは、
○super()が親クラスのPersoの定義を取り出す。
○super().__init__()メソッド呼び出しは、Person.__init__()メソッドを
呼出す。このとき、self引数の親クラスへの受け渡しはPythonが処理する
ので、プログラマーはオプションの引数を適切に渡すことだけをきちんと
やればいい。
なぜ、次のような新クラスを定義しなかったのか
class EmailPerson(Person):
def __init__(self, name, email):
self.name = name
self.email = email
そうすることは不可能ではない。そうしてしまうと継承を使っている意味がなく
なる。継承を使うとPersonの定義が将来変わっても、super()を使っていれば
継承している属性やメソッドは、その変更を反映したものになる。