親クラスのメソッド呼び出し | Python-izm

親クラスのメソッド呼び出し

Python親クラススーパークラス)のメソッドを呼び出す場合、クラススタイルやPythonのバージョンよって方法が異なります。
※旧クラススタイル、新クラススタイルの詳細は新旧クラススタイルを参照してください。

新クラススタイル

Python 2系では

新クラススタイルの場合はsuper関数を使用します。super(自クラス名).メソッド名(引数)のような形で呼び出しますが、旧クラススタイルの呼び出し方法も利用可能です。

Python 2系

# -*- coding: utf-8 -*-


# 新スタイルクラス
class NewStyleClassBase(object):

    def test_method(self, msg):
        print 'NewStyleClassBase: {}'.format(msg)


# 新スタイルのクラスを継承
class NewStyleClass(NewStyleClassBase):

    def test_method(self, msg):
        print 'NewStyleClass: {}'.format(msg)
        super(NewStyleClass, self).test_method(msg)
        # NewStyleClassBase.test_method(self, msg)


new = NewStyleClass()
new.test_method('method call')
NewStyleClass: method call
NewStyleClassBase: method call

Python 2系では新スタイルクラス、旧クラススタイルが選択できます。さらに新スタイルの方はどちらの方法でも呼び出しが可能ですが、可能な限りsuper関数を使用した方が良いでしょう。

Python 3系では

Python 3系では非常にシンプルな形でsuper関数を使用することができます。また旧来の呼び出し方法もサポートされています。

Python 3系

# 新スタイルクラス
class NewStyleClassBase(object):

    def test_method(self, msg):
        print('NewStyleClassBase: {}'.format(msg))


# 新スタイルのクラスを継承
class NewStyleClass(NewStyleClassBase):

    def test_method(self, msg):
        print('NewStyleClass: {}'.format(msg))
        super().test_method(msg)
        # super(NewStyleClass, self).test_method(msg)
        # NewStyleClassBase.test_method(self, msg)


new = NewStyleClass()
new.test_method('method call')
NewStyleClass: method call
NewStyleClassBase: method call

旧クラススタイル

旧クラススタイルの場合です。親クラス名.メソッド名(引数)のような形で呼び出します。親クラス名をハードコードしなければなりません。Python 3系では旧クラススタイルという概念はなく、新クラススタイルしかありません。

Python 2系

# -*- coding: utf-8 -*-


# 旧スタイルクラス
class OldStyleClassBase:

    def test_method(self, msg):
        print 'OldStyleClassBase: {}'.format(msg)


# 旧スタイルのクラスを継承
class OldStyleClass(OldStyleClassBase):

    def test_method(self, msg):
        print 'OldStyleClass: {}'.format(msg)
        OldStyleClassBase.test_method(self, msg)


old = OldStyleClass()
old.test_method('method call')
OldStyleClass: method call
OldStyleClassBase: method call