Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Python

Pythonの「super().__init__」とは?

投稿日:2022年11月30日 更新日:

<目次>

(1) Pythonの「super().__init__」とは?
 (1-1) 構文
 (1-2) サンプルプログラム
 (1-3) 書き方の比較

(1) Pythonの「super().__init__」とは?

(1-1) 構文

Pythonのプログラムを見ていると、以下のような表現をしている部分に出くわした事はないでしょうか?本記事ではこの意味や使い方を紹介します。

class Taxi([親クラス]):
  def __init__(self, XXX, XXX):
    # 書き方#3
    super().__init__([引数をKey-Valueで])

目次にもどる

(1-2) サンプルプログラム

●super()を使用しない場合
⇒lengthやweightの初期化を複数回記述してしまっている(Taxi、Truckで2回)

class Car:
    pass

class Truck(Car):
    # コンストラクタ
    def __init__(self, length, width, capacity_ton):
        # 長さ、幅、容量
        self.length = length
        self.width = width
        self.capacity_ton = capacity_ton

    def getInfo(self):
        return "【トラック】長さ:" + str(self.length) + " 幅:" + str(self.width) + " 容量(t):" + str(self.capacity_ton)

class Taxi(Car):
    # コンストラクタ
    def __init__(self, length, width, company):
        # 長さ、幅、タクシー会社
        self.length = length
        self.width = width
        self.company = company

    def getInfo(self):
        return "【タクシー】長さ:" + str(self.length) + " 幅:" + str(self.width) + " タクシー会社:" + self.company

def main():
    truck = Truck(7200, 2000, 10)
    taxi = Taxi(4000, 2000, "ABC交通")
    print(truck.getInfo())
    print(taxi.getInfo())

if __name__ == "__main__":
    main()

(図131)

●super()を使用する場合
⇒結果は同じだが、lengthやweightの初期化は1回のみ記述(Car)

class Car:
    # コンストラクタ
    def __init__(self, length, width):
        # 長さ、幅
        self.length = length
        self.width = width

class Truck(Car):
    # コンストラクタ
    def __init__(self, length, width, capacity_ton):
        # 長さ、幅、容量
        super().__init__(length, width)
        self.capacity_ton = capacity_ton

    def getInfo(self):
        return "【トラック】長さ:" + str(self.length) + " 幅:" + str(self.width) + " 容量(t):" + str(self.capacity_ton)

class Taxi(Car):
    # コンストラクタ
    def __init__(self, length, width, company):
        # 長さ、幅、タクシー会社
        super(Taxi, self).__init__(length, width)
        self.company = company

    def getInfo(self):
        return "【タクシー】長さ:" + str(self.length) + " 幅:" + str(self.width) + " タクシー会社:" + self.company

def main():
    truck = Truck(7200, 2000, 10)
    taxi = Taxi(4000, 2000, "ABC交通")
    print(truck.getInfo())
    print(taxi.getInfo())

if __name__ == "__main__":
    main()

(図132)

目次にもどる

(1-3) 書き方の比較

super()関数は「親クラスを継承」し、親クラスのメソッドへのアクセスを可能にします。
主な仕様・利点としては以下の通りです。

・super()の戻り値として、親クラスのオブジェクトを返却
・親クラスを明示的に参照しなくてよい
・子クラスに重複する処理を共通化できる

以下の3つの書き方は全て、実行時の挙動としては同じです。

(書き方#1)

class Taxi([親クラス]):
  def __init__(self, XXX, XXX):
    # 書き方#1
    [親クラス].__init__(self, [引数をKey-Valueで])

(書き方#2)

class Taxi([親クラス]):
  def __init__(self, XXX, XXX):
    # 書き方#2
    super([自クラス], self).__init__([引数をKey-Valueで])

(書き方#3)

class Taxi([親クラス]):
  def __init__(self, XXX, XXX):
    # 書き方#3
    super().__init__([引数をKey-Valueで])

いずれの方法も目的は同じで、「親クラスの初期化処理を子クラスから呼び出すこと」です。

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Python
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

多層パーセプトロンをPythonで実装した例をご紹介

  <目次> 多層パーセプトロンをPythonで実装した例をご紹介  (1-1) 実装のフロー  (1-2) サンプルプログラム 多層パーセプトロンをPythonで実装した例をご紹介 多層パ …

オーバーフィッティングの対策(ドロップアウト)をご紹介(Kerasプログラムあり)

<目次> ■オーバーフィッティングの対策(ドロップアウト)をご紹介(Kerasプログラムあり)  ■オーバーフィッティング問題とは?  ■対策の概要  ■(1-1) ドロップアウトの数式  ■(1-2 …

脳波をPythonプログラムで取得して、解析できるようにしたい

  <目次> 脳波をPythonプログラムで取得して、解析できるようにしたい  やりたいこと  STEP1:前提条件(事前準備)  STEP2:デバイス(MindWave Mobile 2) …

PythonでAzure Blob Storageからcsvを取得する方法について

  <目次> (1) PythonでAzure Blob Storageからcsvを取得する方法について  (1-1) STEP1:Pythonの依存性解決  (1-2) STEP2:Azu …

Python開発環境にPandasライブラリをインストールする手順

(0)目次&概説 (1) Pandasの導入  (1-1) Pandasとは? (2) オフラインインストール  (2-1) インストール資源の入手  (2-2) インストール時の諸注意  (2-3) …

  • English (United States)
  • 日本語
Top