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

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

関連記事

Slack AppのWorkflow Stepsの使い方

  <目次> (1) Slack AppのWorkflow Stepsの使い方  (1-0) やりたいこと  (1-1) STEP1:Slackボットの開発(所要時間:60分)  (1-2) …

pyenvのインストール手順(Windows10の例)

  <目次> (1) pyenvのインストール手順(Windows10の例)  (1-1) pyenvとは?  (1-2) pyenvのインストール手順 (1) pyenvのインストール手順 …

matmulとdotの違いについて(Pythonのnumpy・tensorflow)

  <目次> matmulとdotの違いについて(Pythonのnumpy・tensorflow)  (1-1) 両者の違い  (1-2) 両者の違い(実機確認) matmulとdotの違い …

no image

PythonでValueError: If using all scalar values, you must pass an indexエラーが出た時の対処方法

  <目次> (1) PythonでValueError: If using all scalar values, you must pass an indexエラーが出た時の対処方法  ( …

Pythonで画像をcsvに変換する方法について

  <目次> (1) Pythonで画像をcsvに変換する方法について  (1-0) やりたいこと  (1-1) STEP1:前提(Kerasにおける画像データの取り扱い形式)  (1-2) …

  • English (United States)
  • 日本語
Top