Pythonでクラスを使うと、よく出てくるのがこの謎のキーワード…
self
「これって何?」「なんで毎回書くの?」と思ったことがある人、多いのではないでしょうか。
この記事では、実際に私がPygameで作ったクラスを例に、selfの意味と使い方をわかりやすく解説していきます。
🔰 selfってなんなの?
ズバリ、selfは**「クラスの中で使う自分自身」**という意味です。
たとえばこのコード:
self.cart_image = pygame.image.load("cart.png")
これは、「このクラスが持つcart_imageというデータに、画像ファイルを読み込んで保存してますよ〜」という意味です。
✅ selfがあると何がいいの?
クラスの外に変数を出さずに、オブジェクト(インスタンス)ごとに情報を持てるようになります。
たとえば、私が作ったこんなクラス👇
class MainFace:
def __init__(self, screen):
self.screen = screen
self.cart_image = pygame.image.load("cart.png")
self.cart_rect = self.cart_image.get_rect(topleft=(1180, 960))
この中のself.cart_imageやself.cart_rectがあるおかげで、後から別の関数でもこう書けるようになります:
def draw_cart(self):
self.screen.blit(self.cart_image, self.cart_rect)
もし self をつけなかったら、これらの変数は __init__() の中だけでしか使えません。
💡 じゃあ self をつけないとどうなる?
たとえばこんな書き方:
cart_image = pygame.image.load("cart.png") # ← selfがない
これはただの一時的な変数なので、他の関数では呼び出せません。
せっかく読み込んだ画像でも、使えるのは __init__() の中だけになってしまいます。
🎯 結論:selfは「自分用の引き出しを作るラベル」
クラスの中で self.〇〇 と書くことで、
他の関数でも使える
インスタンスごとにデータを持てる
コードがスッキリ整理される
というメリットがあります。
✏ さいごに
私は最初、「selfなんて意味わからん!全部グローバル変数にしちゃえ!」と思っていたのですが、
ゲームを作っていくうちに「selfで管理したほうが圧倒的にラク」だと気づきました。
これからクラスを書く人は、
まずは「self = 自分専用の情報箱」と思っておけばOKです!