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

    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分

    __str__

    このレッスンでは、__str__ を定義して、print したときの見た目を自分で決められるようになります。

    そのまま print すると読めない

    __init__ とメソッドがそろった Expense を、そのまま print してみると困ったことになります。

    Python

    milk = Expense("牛乳", 158, date(2026, 8, 1))
    print(milk)

    出てくるのはクラス名とメモリ上の位置を並べただけの文字列で、品名も金額も見えません。デバッグのたびに print(milk.name, milk.price) と書き並べるのは面倒です。

    __str__ は人が読む表示

    クラスに __str__ メソッドを定義すると、print したときや str() に渡したときにその戻り値が使われます。

    Python

    class Expense:
        def __init__(self, name, price, day):
            self.name = name
            self.price = price
            self.day = day
    
        def __str__(self):
            return f"{self.day.strftime('%m/%d')} {self.name} {self.price}円"
    
    
    print(Expense("牛乳", 158, date(2026, 8, 1)))  # 08/01 牛乳 158円

    戻り値は必ず文字列にします。数値を返すと TypeError になります。第1章で使った strftime をここで再利用すると、日付の書式もクラスの中に閉じ込められます。

    __str__ と __repr__ の違い

    Python にはもう1つ __repr__ という似た名前があります。__str__ が「人が読むための表示」なのに対し、__repr__ は「開発者がデバッグで見るための表示」です。リストの中に入れて print したときは __repr__ のほうが使われるので、両方そろえておくと調査が楽になります。

    Python

        def __repr__(self):
            return f"Expense({self.name!r}, {self.price})"

    !r は、その値を __repr__ の形で埋め込む指定です。まずは __str__ を書けるようになれば十分です。

    日付は固定して確かめる

    学習中は date.today() ではなく date(2026, 8, 1) のように日付を決め打ちにしてください。実行した日によって出力が変わると、正しく書けているのか判断できなくなります。

    要件

    1. str は「月/日 品名 金額円」の形の文字列を返すこと
    2. 月と日は strftime で 2 桁ゼロ埋めにすること
    3. expenses を順に for で回し、print(expense) で3行出力すること

    ヒント

    self.day.strftime('%m/%d') で 08/01 の形になります

    __str__ の戻り値は必ず文字列にします

    print(expense) と書くだけで __str__ が呼ばれます

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

    関連レッスン

    • クラス変数

      クラス変数で消費税率を全体から共有します。

    • dataclass

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

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

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

    • つくる クラスベース化

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

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

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

    • メソッドクラスに属する関数
    • クラスデータと振る舞いを束ねる単位
    • メモリプログラムとデータを一時保持する高速領域
    • デバッグバグを見つけて直す調査と修正の作業
    • 戻り値呼び出し元への返答を表す点線矢印
    • リスト順序付きで複数の値を扱うデータ構造
    • 判断YES/NO 分岐を表す菱形
    main.py
    エディタを読み込んでいます

    メモ

    __str__

    ⌘S で保存