PythonでMROを使用してメソッドを検索するクラスを決めるのを確認する

スポンサーリンク

Pythonでメソッド解決順序(Method resolution order)を使用してメソッドを検索するクラスを決めるのを確認してみます。

■Python

Google Colaboratory(Google Colab),2022年11月25日現在、Python 3.7.15を使用している。

■MROを使用してメソッドを検索するクラスを決めるプログラムを書く

では、MROを使用してメソッドを検索するクラスを決めるプログラムを書いてみます。

■コード

class A:
  def display(self):
    print('ディスプレイAを表示')

class B(A):
  pass

b = B()
b.display()

今回はオブジェクトを作成するためのテンプレート(設計図)であるAというクラス(class)を宣言します。クラス内にdef文を用いてdisplayというメソッドを定義します。メソッドが呼び出された場合の処理は、print()で日本語の文字列を出力させるものとします。そして、括弧内にパラメータ,引数としてself(自己)(インスタンス,クラスを実体化したもの)を設定します。なお、クラス内のメソッドで渡される最初の引数,パラメータは、オブジェクト自体でなければならない。

設定後、今度はオブジェクトを作成するためのテンプレート(設計図)であるBというクラス(class)を宣言します。クラス内にはpass文(何もしないという処理)を記述します。

記述後、bという変数を用意し、その中にB()を格納し、インスタンス化を行います。インスタンス化によりオブジェクトが作成されたことで、クラス内に定義したメソッドにアクセスできるようになりました。アクセスできるようになりましたので、b変数で”.”(ドット)を用いてdisplay()にアクセスしてみます。

■実行・検証

このセルを保存し、Google Colaboratory上で、セルを実行してみます。

実行してみると、「b.display()」でBというクラス内のメソッドを呼び出していますが、Aというクラス(class)内に定義したメソッドが検索され、呼び出されて出力されました。このことから、Pythonのインタープリター(開発者が記述したコードを中間言語に一度に1行ずつ変換するプログラム)は、MROを使用して、継承階層の下から上を検索し、メソッドを検索するクラスを決定したということになります。

コメント

タイトルとURLをコピーしました