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

Azure Cognitive Searchを行うPythonプログラム(ドキュメント検索)

  <目次> Azure Cognitive Searchを行うPythonプログラム(ドキュメント検索)  STEP0:前提条件  STEP1:キーとURLの取得  STEP2:セマンティ …

Bing AIのAPIを疎通(HelloWorld)

  <目次> (1) Bing AIのAPIを疎通(HelloWorld)  やりたいこと/概要  前提条件  STEP1:Bing Web Search APIにサインアップ  STEP2 …

no image

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

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

PythonでSQLAlchemyを使ってOracleDBに接続する方法

(0)目次&概説 (1) 記事の目的  (1-1) 目的  (1-2) 前提条件 (2) 事前準備  (2-1) 準備1(cx_oracleパッケージの導入)   (2-1-1) インストール資源の入 …

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エラーが出た時の対処方法  ( …

  • English (United States)
  • 日本語
Top