.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. プログラミング言語
  4. Python
  5. Pythonのsuper関数の使い方について解説!そもそもPythonのsuperとは?

Pythonのsuper関数の使い方について解説!そもそもPythonのsuperとは?

  • Python
  • プログラミング言語
公開日時:   更新日時:
Pythonのsuper関数の使い方について解説!そもそもPythonのsuperとは?
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>
    システム
    エンジニア
    Pythonのsuper関数について教えていただけますか。
    プロジェクト
    マネージャー
    分かりました。super関数を理解する上で不可欠なクラスと継承、インスタンス、メソッド、アトリビュートなどについてもサンプルプログラムを交えながら解説しましょう。

    Pythonのsuperとは?


    Pythonのsuperとはスーパークラス(親クラス)に関するオブジェクトを返す関数です。super関数が返すオブジェクトを使うと親クラスの「メソッド」にアクセスすることができます。ちなみにこのオブジェクトを使ってアトリビュートにアクセスすることはできません。

    上記の説明で分かってしまった方は、以下を読む必要はありません。良く分からないという方は、クラスと継承の他、インスタンス、メソッド、アトリビュートなど関連するものを一通り理解しないと「良く分からない」と思いますので、その辺の解説をします。

    以下に示すプログラムはPython3で動作させてください。動作確認はWindows10とPython3.9.1を使用して行いました。

    クラスについて

    Pythonはオブジェクト指向のプログラミング言語です。「オブジェクト指向」の「オブジェクト」とは大雑把に言いますと「関連するプログラムとデータをひとまとまりにしたもの」ということになります。

    データを操作するにはプログラムが必要ですが、そのデータとプログラムをひとまとめにしてブラックボックスにしてしまえば、後は使い方さえ分かっていれば問題なくそのオブジェクトを使うことができます。

    クラスとはオブジェクトの設計図のようなものです。アトリビュート(クラス内の変数)と、メソッド(クラスで定義した関数をメソッドと言います)の定義をします。定義と言ってもPythonの場合はアトリビュートを使うとき(変数に代入しようとしたとき)に自動的に作成されますので、実質的にはメソッドの定義と言っても良いでしょう。

    以下に簡単なExampleClassクラスの定義を示します。この関数はメソッドを定義していないので何もしないクラスになります。インスタンスとは、classで定義(設計)した内容を元にメモリ上に実体化したもの(オブジェクト)です。

    クラスの継承

    クラスは設計図のようなものなので既存のクラスを継承して機能を拡張したり、改良したりできます。

    下記のプログラムの親クラスではaddとpiメソッドを定義しています。子クラスは親クラスを継承していますので、addメソッドとpiメソッドを使用できます。更に子クラスでは、新たにsubメソッドを定義しています。

    また、子クラスではpiメソッドを改めて定義(オーバーライド)しています。オーバーライドした場合は、改めて定義した方のメソッドが実行されますので、この場合には円周率のリターン値の精度が上がります。

    しかし、オーバーライドする前の(親クラスの)メソッドを呼び出したいということもあります。そんな時に使われるのがsuper関数です。詳細は後述します。

    なお、継承元となるクラスは「基底クラス」「親クラス」「スーパークラス」などと呼ばれ、継承先となるクラスは「派生クラス」「子クラス」「サブクラス」などと呼ばれています。

    Pythonのsuper関数の使い方


    Pythonのsuper関数はPython3とPython2で書き方が異なります。ここではPython3の書き方で解説します。

    まずはsuper関数を使ったサンプルプログラムを紹介します。それと2つのクラスを継承したときのsuper関数の動作を解説します。

    super関数を使ったサンプルプログラム

    Pythonのsuper関数を使うときというのは、継承する(オーバーライドする)メソッドの機能を拡張したいときなどでしょう。単純な置き換えで機能拡張しようとすると、親クラスのメソッドのコードも含めて記述する必要がありますが、親クラスのメソッドを呼び出すことで、その部分のコードを書く必要がなくなります。

    下記にsuper関数を使って機能拡張したメソッドのサンプルプログラムを示します。2つあるメソッドともsuper関数を使って機能拡張しています。

    2つのクラスを継承したときのsuper関数の動作

    2つのクラスを継承したとき、どちらのクラスにも同じ名前のメソッドがあるとsuper関数は正しく選択することができません。

    Pythonの探索アルゴリズムが分かっていれば使える可能性もありますが、不具合の原因になることも想定しましょう。そういった理由でsuper関数は使えない(使わない)ので継承したクラスのメソッドを直接呼び出す必要があります。

    以下のサンプルプログラムは、親クラス2つ(Info、 Info2)を持つ子クラス(PersonalInfo)からsuper関数を使わないで直接親クラスのメソッドを呼び出しているサンプルプログラムです。

    システム
    エンジニア
    2つのクラスを継承したときにどちらのクラスにも同じ名前のメソッドがあるとsuper関数は正しく選択できないのですか。
    プロジェクト
    マネージャー
    その通りです。2つのクラスを継承したときどちらのクラスにも同じ名前のメソッドがあるときは継承したクラスのメソッドを直接呼び出す必要があります。

    最後に

    Pythonはクラスの多重継承ができるプログラミング言語です。多重継承は、便利な機能です。上手く活用すれば多重継承のときでもsuper関数は「使える関数」になるでしょう。実際にご自身でコードを書いて理解を深めて下さい。

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    Python新着案件New Job