Python入門から応用までの学習サイト


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

Python親クラス(スーパークラス)メソッドを呼び出す場合、クラススタイルやPythonのバージョンよって方法が異なります。

※旧クラススタイル、新クラススタイルの詳細は新旧クラススタイルを参照してください。

旧クラススタイルの場合です。「親クラス名.メソッド名(引数)」のような形で呼び出します。親クラス名をハードコードしなければなりません。


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



新クラススタイルの場合は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系では非常にシンプルな形で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
スタートブック


入門 Python 3


Effective
Python


退屈なことは
Pythonにやらせよう

 
 
 

メソッドにもさまざまな種類があります!

▶応用編:メソッドの種類



確かな力が身につく
Python「超」入門




P  R