Pythonクラス基礎まとめ
ここでは、これまで出てきたクラスやメソッドの基礎的な考え方を整理していきます。
1. クラスとインスタンス
Python では クラス を定義して、その設計図から インスタンス を作ることができます。
class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
x = Complex(3.0, -4.5)
print(x.r, x.i) # 3.0 -4.5
-
__init__は コンストラクタ で、インスタンス生成時に呼ばれる特別なメソッド。 -
selfには作られた インスタンス自身 が渡される。 -
x = Complex(3.0, -4.5)としたとき、3.0と-4.5がrealpartとimagpartに入る。selfはxそのもの。
2. self とは何か?
class Test:
def __init__(self, a):
if a == 123:
print("init呼ばれた")
t = Test(123)
ここでは t = Test(123) と呼ぶと:
-
Testクラスからインスタンスを生成 - そのインスタンスを
selfとして__init__に渡す - 引数
123がaに入る
→ 結果 "init呼ばれた" が出力される。
self は インスタンス自身を指すもの。左辺の t が self に対応するイメージ。
3. メソッドと関数の違い
def standalone():
print("ただの関数")
class A:
def method(self):
print("インスタンスメソッド", self)
-
関数: クラスの外に定義される。
standalone()のように単独で呼ぶ。 -
メソッド: クラスの中に定義される。インスタンスやクラスと結びつき、
selfなどを通じて内部データにアクセスできる。
つまり:
- 関数は「独立した処理」
- メソッドは「オブジェクトに結びついた処理」
4. メソッドオブジェクト
class A:
def hello(self):
return "hello world"
x = A()
xf = x.hello
print(xf()) # hello world
ここで x.hello は「メソッドオブジェクト」。
-
xf = x.helloで変数に代入しても、あとからxf()と呼べる。 - このときも
selfにはxが渡される。
一方:
f = A.hello
f() # エラーになる(self がないため)
f(A()) # OK(明示的にインスタンスを渡す)
クラスから直接メソッドを呼び出すと self は自動で補われないので、自分で渡す必要がある。
まとめ
- クラスは設計図、インスタンスはその実体。
-
__init__に渡す引数はインスタンス生成時に指定する。 -
selfはインスタンス自身を指す。 - 関数とメソッドの違いは「クラスに属しているかどうか」。
- メソッドは変数に代入してあとから呼び出すこともできる。
→ クラスを使うと「データと処理をひとまとまりで管理」できるのが大きな利点!