Pythonの継承とは?コードの再利用で保守性を高める基本操作

【作業自動化】Python
スポンサーリンク

「あ、また同じようなコード書いてる……。これ、もし後から仕様が変わったら、コピペした10箇所全部手作業で直さなきゃいけないの……?」

PCの画面を見つめながら、そんなふうに思ったことはありませんか?

Pythonにおける「継承」という仕組みを理解すると、すでにあるプログラムを効率的に再利用できるようになり、コードの重複を防いで保守性を高めることができます。

今回は継承の基本的な考え方から実践的なコードの記述方法まで分かりやすく解説します。

【作業自動化】Pythonの記事を見る 

継承の基本的な仕組みとメリット

基本テンプレートのコピーと拡張

プログラミングにおける「継承」とは、既存のクラス(親クラス)に定義された機能や属性を引き継ぎつつ、新しい機能や差分(子クラス)を追加してカスタマイズする仕組みになります。

日常の事務作業で例えると、社内の「基本請求書テンプレート」を活用する流れによく似ています。

たとえば、特定の取引先専用に「特別割引欄を追加した請求書」が必要になった場合、白紙の状態から新しい請求書をイチから作り直すことはほとんどありませんよね。

既存の基本請求書フォーマットをコピーし、必要な割引欄だけを付け足して作成するのが一般的です。

親クラスと子クラスの関係性

この考え方をPythonのクラスに当てはめると、次のようになります。

  • 親クラス(基底クラス): 基本となる請求書フォーマット
  • 子クラス(派生クラス): 基本フォーマットを継承し、割引機能を追加した専用フォーマット

共通の土台となる処理を親クラスに集約しておくことで、同じコードを何度も書く手間が省けるだけでなく、仕様変更時の修正箇所も最小限に抑えることができます。

実務で役立つ継承のサンプルコード

基本の請求書クラスと割引機能付き子クラス

Pythonにおける継承の構文はシンプルで、子クラスを定義する際にクラス名の後ろの括弧内に親クラス名を指定します。

また、組み込み関数のsuper()を使用することで、親クラスの初期化処理(__init__)をそのまま呼び出して再利用できます。

# 親クラス:基本の請求書(ベースとなる共通設計)
class Invoice:
    def __init__(self, company: str, amount: int):
        self.company = company
        self.amount = amount

    # 共通機能:請求書の作成案内を出力
    def create_pdf(self):
        print(f"{self.company}様へ、{self.amount}円の基本請求書を作成しました。")

# 子クラス:割引機能を追加した専用請求書(Invoiceクラスを継承)
class DiscountInvoice(Invoice):
    def __init__(self, company: str, amount: int, discount: int):
        # super()を用いて親クラスの初期化処理をそのまま呼び出し
        super().__init__(company, amount)
        self.discount = discount  # 子クラス固有の属性を追加

    # 子クラス独自の機能:割引を適用して最終金額を算出
    def apply_discount(self):
        final_amount = self.amount - self.discount
        print(f"特別割引適用後、最終的なご請求額は {final_amount}円 になります。")

# --- 実際の動作確認 ---
# 1. 基本の請求書を作成する場合
normal_invoice = Invoice("B株式会社", 10000)
normal_invoice.create_pdf()
# 出力: B株式会社様へ、10000円の基本請求書を作成しました。

print("-------------------")

# 2. 割引付きの請求書を作成する場合(子クラスの利用)
special_invoice = DiscountInvoice("A株式会社", 10000, 2000)

# 親クラスのメソッドを継承しているため、子クラス側で再定義せずに呼び出し可能
special_invoice.create_pdf()

# 出力: A株式会社様へ、10000円の基本請求書を作成しました。
# 子クラス独自の拡張機能もそのまま実行可能
special_invoice.apply_discount()
# 出力: 特別割引適用後、最終的なご請求額は 8000円 になります。

継承を活用するメリットとコードの保守性

いかがでしょうか?DiscountInvoice(子クラス)のコード内にはcreate_pdfメソッドを記述していませんが、親クラスであるInvoiceから継承しているため、問題なく実行できます。

もし全社的な請求書の送付文面まで作成した後に変更が入った場合でも、修正が必要なのは親クラス(Invoice)のcreate_pdfメソッド1箇所のみです。

これを継承しているすべての子クラスへ自動的に変更が反映されるため、手作業による修正漏れや誤記といったヒューマンエラーも未然に防ぐことができます。

このように、継承はプログラムの再利用性と安全性を高めるための強力な手法となります。共通化できる処理を見つけたらクラス継承を取り入れ、メンテナンス性の高いコード設計を目指していきましょう!

【作業自動化】Pythonの記事を見る 


Pythonの本は種類が多すぎて、業務効率化に使えるのか見分けるのが大変ですよね。実務自動化に5年以上携わってきた私が、「デスクワークの自動化に即戦力になった本」を厳選して紹介します。失敗しない1冊を見つけたい方は、ぜひ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でしたが、年間100万円以上節約していました。
株式投資で年間360万円以上投資し、iDeCoも併用しています。
総資産はアッパーマス層に到達しました。
資格は日商簿記3級を持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、生産性を高めるITスキルについて発信しています。

生活を豊かにするため、高配当株投資で年間配当金60万円をめざしています。
現在の年間配当金は30万円ほどです。

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【作業自動化】PythonITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました