親クラスのインスタンスメソッド呼出し
super関数を利用することで、親クラスのインスタンスメソッドを呼び出すことができる。
code:python
class Hoge:
def show(self):
print('showメソッド')
class Foo(Hoge):
pass
f1 = Foo()
f1.show()
当たり前のことであるが、継承したインスタンスメソッドは、実行しなければ処理は行われない。
code:python
class Hoge:
def __init__(self, data):
self.data = data
def show(self):
print('# show of Hoge', self.data)
class Foo(Hoge):
def __init__(self, data):
pass
f1 = Foo(1)
f1.show()
# AttributeError: 'Foo' object has no attribute 'data'
super関数を利用することで、親クラスのメソッドを実行できる。下の例は子クラスのコンストラクタ内で親クラスのコンストラクタを実行する。
code:python
class Hoge:
def __init__(self, data):
self.data = data
def show(self):
print('# show of Hoge', self.data)
class Foo(Hoge):
def __init__(self, data):
super().__init__(data) # <--- 着目
pass
f1 = Foo(1)
f1.show()
# show of Hoge 1
Fooクラスのインスタンスf1を生成したときに呼び出されるのはコンストラクタFoo.__init__である。 
この中で親クラスのコンストラクタHoge.__init__を呼び出すことで、
インスタンスf1の中にインスタンス変数self.dataが作られる。
また、親クラスの定義文に記述されたself変数は、それを継承した子クラスのインスタンスを指していることに注意すること。
code:python
class Hoge:
def __init__(self):
self.data1 = 'Hoge'
def show(self):
print('# show of Hoge : ', self.data1, self.data2)
class Foo(Hoge):
def __init__(self):
super().__init__()
self.data2 = 'Foo'
f1 = Foo()
f1.show()
## show of Hoge : Hoge Foo