コース一覧
    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分

    クラス変数

    このレッスンでは、クラス変数を使って、全インスタンスで共有する値を1か所に置けるようになります。

    同じ数字がコードのあちこちに散る

    前のレッスンの total には 1.1 という数字が直に書かれていました。税率を使う場所が増えると、この数字がコードのあちこちに現れます。税率が変わったときに1つ直し忘れれば、そこだけ古い金額が出続けます。

    こういう「全員で共有したい値」は、クラス変数として class 文の直下に置きます。

    Python

    class Expense:
        TAX_RATE = 0.1
    
        def __init__(self, name, price):
            self.name = name
            self.price = price
    
        def total(self):
            return int(self.price * (1 + Expense.TAX_RATE))

    インスタンス変数との違い

    self.price はインスタンス変数で、インスタンスごとに別の値を持ちます。牛乳の 158 とトマトの 240 は別物です。

    いっぽう TAX_RATE はクラスに1つだけあり、すべてのインスタンスが同じものを見ます。読むときは Expense.TAX_RATE とクラス名から書くのが確実です。self.TAX_RATE でも読めますが、書き込みだけは事情が違います。

    Python

    Expense.TAX_RATE = 0.08   # 全インスタンスに効く
    milk.TAX_RATE = 0.08      # milk だけに新しい属性ができる

    self.TAX_RATE = ... と書くと、クラス変数は変わらず、そのインスタンス専用の属性が新しくできてしまいます。共有の値を書き換えたいときは必ずクラス名から代入してください。

    定数は大文字で書く

    Python には定数の文法がありません。そのかわり、変えないつもりの値は TAX_RATE のように大文字とアンダースコアで書く慣習があります。読む人に「これは書き換えない値だ」と伝わります。

    金額は整数に丸める

    税率は 0.1 という float なので、掛け算の結果には誤差が乗ります。合計を出す前に、1件ずつ int() で整数に丸めてから足してください。丸める前の float を足してしまうと、合計だけ 1 円ずれることがあります。

    要件

    1. class 文の直下にクラス変数 TAX_RATE を 0.1 で定義すること
    2. total は int(self.price * (1 + Expense.TAX_RATE)) を返すこと
    3. tax_included_total は Expense.TAX_RATE に引数 rate を代入してから合計すること
    4. 1 件ずつ整数に丸めてから合計すること

    ヒント

    クラス変数は class Expense: のすぐ下に書きます

    書き換えるときは self ではなく Expense.TAX_RATE に代入します

    合計は sum(expense.total() for expense in expenses) で出せます

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

    関連レッスン

    • dataclass

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

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

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

    • つくる クラスベース化

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

    • 第7章クイズ

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

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

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

    • クラスデータと振る舞いを束ねる単位
    • 変数データに名前をつけて参照する仕組み
    • インスタンスクラスから生成された実体
    • 属性インスタンス属性=各インスタンス固有の値(self.name)。
    • 引数位置引数=順番で渡す。
    main.py
    エディタを読み込んでいます

    メモ

    クラス変数

    ⌘S で保存