0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonのクラスと__init__を理解する:self、インスタンス、メソッドの基礎

Last updated at Posted at 2026-02-05

◆ スクリプト例

class SchoolReport:
    def __init__(self, name, score):
        self.student_name = name
        self.student_score = score

    # メソッド(インスタンスメソッド)の例
    def show(self):
        return f'{self.student_name}: {self.student_score}'


# イニシャライザの引数(name, score)に入れたい値を指定(self の次の引数)
sr_a = SchoolReport('田中 A', 85)
sr_b = SchoolReport('鈴木 B', 92)

# 表示する
print(sr_a.show())
print(sr_b.show())

実行結果

田中 A: 85点
鈴木 B: 92点

◆ クラス

「クラス」とは「設計図(またはテンプレート)」である。

class SchoolReport:
    def __init__(self, name, score):
        self.student_name = name
        self.student_score = score

このコード自体はまだ何も処理を行わない。「成績表とはこういうデータを持つものだ」という定義(仕様書)があるだけ。


◆ インスタンス

実際にメモリ上で作成された「実体」のこと。
今回の例では "SchoolReport型の個体(インスタンス)" である。
例:名前「田中 A」、点数「85点」を持つ成績表データ

PythonのOOPの文脈では、「インスタンス」と「オブジェクト」は基本的に同義。


◆ インスタンス変数

オブジェクトごとに違うデータが代入される変数
上記の例では student_namestudent_score がインスタンス変数にあたる。


◆ メソッド

クラスの中で定義された「処理(関数)」 のこと。
そのクラスから作られたインスタンス(オブジェクト)に対して呼び出して使う。

例:

def show(self):
    return f'{self.student_name}: {self.student_score}'

これは「インスタンスメソッド」で、そのインスタンスが持つデータ(インスタンス変数)を使って処理するのが基本。

呼び出しは次のようになる:

  • sr_a.show()
  • sr_b.show()

このとき show の先頭引数 self には、それぞれ呼び出し元のインスタンスが自動で入る(sr_a から呼べば self = sr_a)。


◆ self

このクラスからオブジェクトが作成されたとき、そのオブジェクト自身を表す。
なぜ self が必要かというと、Pythonのクラス定義の中では「これから作られる個体の具体的な名前(変数名)」がまだ分からないからである。
そのため、メソッド内で「生成されたその個体自身」を指し示す共通の入口として self を使う。

また、sr_a.メソッド(...) のように「インスタンスから」メソッドを呼び出すと、Pythonが内部的にそのインスタンスを先頭引数(self)として自動で渡す。たとえば次はほぼ同じ意味になる。

  • sr_a.show()
  • (内部的なイメージ)SchoolReport.show(sr_a)

同様に、次もほぼ同じ意味:

  • sr_a = SchoolReport('田中 A', 85)
  • (内部的なイメージ)SchoolReport.__init__(sr_a, '田中 A', 85)

init

イニシャライザ(初期化メソッド)
通常、クラスからインスタンスが生成されるときに 1回呼び出される(自動実行される)
インスタンス変数に値を代入するときによく使われる。

※厳密には、オブジェクト生成そのものは主に __new__ が担当し、__init__ は生成後の初期化を行う。

init を使うメリット:
→ インスタンスを "正しく初期化し、完全な状態" で使えるようにすること。

さらに、
「インスタンス(その個体)に紐づく値」として保持したい場合は、self.xxx の形で代入する。
例:self.student_name = name / self.student_score = score


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?