コース一覧
    Pythonクラス・総合制作
    dataclass

    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分

    dataclass

    このレッスンでは、@dataclass を使って、データを入れるだけのクラスを短く書けるようになります。

    __init__ の書き写しが退屈になる

    属性が増えるほど __init__ は同じ言葉の繰り返しになります。

    Python

    class Expense:
        def __init__(self, name, price, category):
            self.name = name
            self.price = price
            self.category = category

    3つの属性に対して、引数と代入で名前を6回書いています。書き写しの途中で1つ抜けても文法エラーにはならないので、見つけにくいバグの種になります。

    @dataclass は __init__ を自動で作る

    標準ライブラリの dataclasses から dataclass を読み込み、クラスの上に @dataclass と付けます。すると、クラスの直下に並べた変数から __init__ が自動的に作られます。

    Python

    from dataclasses import dataclass
    
    
    @dataclass
    class Expense:
        name: str
        price: int
        category: str = "未分類"
    
    
    milk = Expense("牛乳", 158, "食費")
    print(milk.price)  # 158

    name: str の : str は型ヒントで、「ここには文字列が入る想定だ」と読む人に伝える印です。dataclass はこの並びを見てフィールドを決めるので、型ヒントは省略できません。= "未分類" のように既定値も書けます。既定値のあるフィールドは、無いフィールドより後ろに置く決まりです。

    比較と表示も付いてくる

    @dataclass は __init__ だけでなく __repr__ と __eq__ も自動で作ります。print したときに中身が見える形になり、== で「全フィールドが同じなら等しい」と判定できるようになります。前のレッスンで手書きした __str__ の仕事を、かなりの部分まで肩代わりしてくれます。

    メソッドは今までどおり書ける

    自動で作られるのは決まりきった部分だけです。total や label のような自分のメソッドは、これまでと同じく def で書き足せます。デコレータの @ は、そのすぐ下のクラスや関数に機能を足す記法です。

    要件

    1. クラスに @dataclass を付けること
    2. name, price, category を型ヒント付きで並べ、category の既定値を「未分類」にすること
    3. label は「牛乳(食費) 158円」の形の文字列を返すこと
    4. expense_labels は label の結果を並べたリストを返すこと

    ヒント

    デコレータはクラス定義の直前の行に @dataclass と書きます

    型ヒントを省くとフィールドとして認識されません

    リストは [expense.label() for expense in expenses] で作れます

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

    関連レッスン

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

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

    • つくる クラスベース化

      辞書ベースの処理を全て Expense 前提に書き換えます。

    • 第7章クイズ

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

    • パッケージ構成に整理

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

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

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

    • クラスデータと振る舞いを束ねる単位
    • 属性インスタンス属性=各インスタンス固有の値(self.name)。
    • 引数位置引数=順番で渡す。
    • 標準ライブラリPythonに同梱の公式モジュール群
    • 変数データに名前をつけて参照する仕組み
    • 型ヒントPython の任意型注釈(実行時は緩い)
    • dataclassboilerplate を減らすクラス定義の形
    • フィールドクラスが持つデータ
    main.py
    エディタを読み込んでいます

    メモ

    dataclass

    ⌘S で保存