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

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

関連記事

PythonでHTTP Error 403: Forbiddenエラーが出た時の対処方法とエラーの意味について

(0)目次&概説 (1) エラー:HTTP Error 403: Forbidden  (1-1) 発生状況・エラーメッセージ  (1-2) 原因  (1-3) 対処方法   (1-3-1) 修正前の …

PythonでPandasライブラリを用いてcsvファイルを読み込む方法

<目次> (1) PythonでPandasライブラリを用いてcsvファイルを読み込む方法  (1-1) 構文  (1-2) サンプルプログラム  (1-3) read_csvの主要なオプションご紹介 …

Pythonで複数の画像を結合する方法をご紹介

<目次> (1) Pythonで複数の画像を結合する方法  (1-1) STEP1:Pillowのインストール  (1-2) STEP2:画像の読み込み  (1-3) STEP3:画像を結合  (1- …

Slackアプリで「The top-level `text` argument is missing」の対処

<目次> Slackアプリで「The top-level `text` argument is missing」の対処  エラー内容  直接原因  直接原因への対処  根本原因  根本原因への対処   …

no image

OpenAIでPDFファイルを要約する方法(サンプルプログラムをご紹介)

  <目次> OpenAIでPDFファイルを要約する方法(サンプルプログラムをご紹介)  やりたいこと/概要  サンプルプログラム  動かし方 OpenAIでPDFファイルを要約する方法(サ …

  • English (United States)
  • 日本語
Top