コース一覧
    Pythonクラス・総合制作
    つくる クラスベース化

    Pythonクラス・総合制作

    クラスと総合制作を学び、Pythonの知識を組み合わせた小さなプログラムを完成できるようにします。

    1
    クラス入門
    01. クラス定義15分
    02. __init__とインスタンス変数15分
    03. メソッド15分
    04. __str__15分
    05. クラス変数15分
    06. dataclass15分
    07. オブジェクトと内包表記15分
    08. つくる クラスベース化20分
    09. 第7章クイズ10分
    2
    総合制作
    01. パッケージ構成に整理20分
    02. 月次レポートv220分
    03. 動作チェックスクリプト20分
    04. 自由拡張20分
    05. 完成と次のステップ10分

    つくる クラスベース化

    このレッスンでは、新しい文法を足さずに、第7章で覚えた道具だけで家計簿をクラスベースに作り直します。

    辞書ベースからの卒業

    第6章まで、支出1件は ["牛乳", 158, "食費"] のようなリストや、キー付きの辞書でした。今回はそれを入り口だけに残し、読み込んだ直後に Expense へ変換します。以降の集計も表示も、すべて属性とメソッドで書きます。データの持ち方が1か所に決まるので、あとから項目を足すときに直す場所も1か所で済みます。

    使う道具は次のとおりです。

    • @dataclass でフィールドを宣言し、__init__ を自動で作る
    • クラス変数 TAX_RATE で税率を共有する
    • メソッド total で税込金額を出す
    • __str__ で1行の表示を決める
    • 内包表記で生データを Expense に変換し、条件で絞り込む

    dataclass の中のクラス変数

    @dataclass を付けたクラスでは、型ヒントの付いた変数だけがフィールドになります。TAX_RATE = 0.1 のように型ヒントを書かない代入は、フィールドにはならず、ふつうのクラス変数として残ります。これはよく使う書き分けなので覚えておいてください。

    出力の形

    3つの見出しを挟んで、明細、カテゴリ別合計、500円以上の品名を順に出します。カテゴリの並び順は辞書の順ではなく sorted で決めてください。辞書に入れた順に頼ると、データの順番を変えたときに結果が変わってしまいます。

    税込金額は必ず int() で整数に丸めてから足します。float のまま合計すると、462.00000000000006 のような値がそのまま画面に出ます。

    見本

    プレーンテキスト

    === 明細 ===
    08/01 牛乳(食費) 173円
    ...
    === カテゴリ別 ===
    交通費 462円
    ...

    要件

    1. クラス変数 TAX_RATE を 0.1 で持ち、total が int(self.price * (1 + Expense.TAX_RATE)) を返すこと
    2. str は「08/01 牛乳(食費) 173円」の形にすること
    3. rows を内包表記で Expense のリストに変換すること
    4. カテゴリ別合計は税込金額を足し、カテゴリ名を sorted の順に出すこと
    5. 税込金額が 500 円以上の品名を、読点で連結して1行で出すこと

    ヒント

    dataclass では型ヒントの無い代入はフィールドになりません

    カテゴリ別の合計は totals.get(category, 0) を使うと短く書けます

    連結は "、".join(high) です

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • 第7章クイズ

      クラスの理解を確認します。

    • パッケージ構成に整理

      models と report に分け、実務で見かける構成に整えます。

    • オブジェクトと内包表記

      内包表記で属性を見て、高額な Expense だけを抽出します。

    • dataclass

      dataclass で定型のクラスを短く書き直します。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • クラスデータと振る舞いを束ねる単位
    • リスト順序付きで複数の値を扱うデータ構造
    • 属性インスタンス属性=各インスタンス固有の値(self.name)。
    • メソッドクラスに属する関数
    • フィールドクラスが持つデータ
    • 変数データに名前をつけて参照する仕組み
    • 内包表記for と if を 1 行で書く構文
    • dataclassboilerplate を減らすクラス定義の形
    main.py
    エディタを読み込んでいます

    メモ

    つくる クラスベース化

    ⌘S で保存