コース一覧
    Pythonクラス・総合制作
    __init__とインスタンス変数

    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分

    __init__とインスタンス変数

    このレッスンでは、__init__ を書いて、インスタンスを作った時点で必要な値がそろっている状態にできるようになります。

    作りっぱなしをやめる

    前のレッスンでは Expense() で器を作ったあと、外から milk.name = "牛乳" と属性を足しました。この書き方だと、価格を入れ忘れたインスタンスが平気で作れてしまいます。使う側で expense.price を読んだところで初めて落ちるので、原因の場所も遠くなります。

    Python には、インスタンスが作られた直後に自動で呼ばれる __init__ という特別なメソッドがあります。ここで属性を入れておけば、作った時点で値がそろっていることが保証されます。

    Python

    from datetime import date
    
    
    class Expense:
        def __init__(self, name, price, day):
            self.name = name
            self.price = price
            self.day = day
    
    
    milk = Expense("牛乳", 158, date(2026, 8, 1))
    print(milk.name, milk.price)  # 牛乳 158

    Expense("牛乳", 158, date(2026, 8, 1)) と書くと、__init__ が呼ばれて3つの属性が入ります。前後のアンダースコア2本は「Python が決められた場面で自動的に呼ぶ名前」という印で、自分から milk.__init__() と呼ぶことはありません。

    self は作られた本人

    __init__ の第1引数 self は、いま作られているインスタンス本人です。self.name = name は「この本人の name 属性に、引数の name を入れる」という意味になります。呼ぶ側は self を渡しません。Python が自動で渡してくれます。

    self という名前は決まりではなく慣習ですが、Python のコードはほぼ例外なく self と書きます。読む人が迷わないよう、あわせておきましょう。

    属性の初期値も書ける

    引数を受け取らずに固定値を入れることもできます。次のレッスンで足すメソッドのために、たとえば分類の初期値を持たせておく、といった使い方ができます。

    Python

    class Expense:
        def __init__(self, name, price, day):
            self.name = name
            self.price = price
            self.day = day
            self.category = "未分類"

    これで「品名・金額・日付を必ず持つ支出」という型ができました。

    要件

    1. init で self.name / self.price / self.day の3つを設定すること
    2. expense_summary は Expense を作り、その属性から文字列を組み立てて返すこと
    3. 日付・品名・金額を半角スペースで区切り、金額の後ろに円を付けること

    ヒント

    self は作られたインスタンス本人です

    self.name = name のように、引数を属性へ写します

    戻り値は f"{expense.day} {expense.name} {expense.price}円" の形です

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

    関連レッスン

    • メソッド

      税込金額を返すメソッドを書き、データと処理をまとめます。

    • __str__

      __str__ を定義して、print したときの表示を決めます。

    • クラス変数

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

    • dataclass

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

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

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

    • インスタンスクラスから生成された実体
    • 属性インスタンス属性=各インスタンス固有の値(self.name)。
    • メソッドクラスに属する関数
    • 引数位置引数=順番で渡す。
    • 分類カテゴリを当てる教師ありタスク
    main.py
    エディタを読み込んでいます

    メモ

    __init__とインスタンス変数

    ⌘S で保存