【第23回Python基礎講座】たい焼きで理解!クラスとインスタンス(オブジェクト指向)

本ページはプロモーションが含まれています
【第23回Python基礎講座】たい焼きで理解!クラスとインスタンス(オブジェクト指向)
国内のAI狂い

やっほー!国内のAI狂いだよ!✨

第23回へようこそ!ここからはいよいよ、プログラミング界の「ラスボス」とも言われる「オブジェクト指向」について学ぶよ。
「うわっ、難しそう…」って思った?大丈夫、逃げないで!(笑)
実はこれ、「たい焼き」で考えると一発で理解できるんだ。今日はみんなでたい焼き屋さんになって、クラスとインスタンスの秘密を解き明かそう!🐟🔥

公式の「ここがわかりにくい」:C++とか言われても…

公式ドキュメントの「クラス」の冒頭を見てみよう。

Python のクラスは、C++ と Modula-3 のクラスメカニズムを混ぜたものです。

「知らんがな!!」ってツッコミたくなるよね(笑)。
Pythonを勉強しに来たのに、いきなり他の言語の話をされても困っちゃう。
ここでは難しい歴史の話は置いておいて、「モノ(オブジェクト)を作るための設計図」という本質だけを理解していこう!

1. 「たい焼きの型」と「焼けたたい焼き」

要するにこれは「設計図(型)から、実物(モノ)を量産する仕組み」だよ!

オブジェクト指向には、超重要な2つの言葉があるよ。これを「たい焼き」に例えるとこうなる!

  • クラス (Class)
    =「たい焼きの金型(設計図)」
    これ自体は食べられないけど、「どんな形か」「何ができるか」が決まっているよ。
  • インスタンス (Instance)
    =「焼けたたい焼き(実体)」
    金型を使って実際に作ったもの。あんこ入り、クリーム入りなど、中身を変えて量産できるよ。

プログラミングでは、まず「クラス(型)」を作って、そこから「インスタンス(実体)」をポコポコ生み出して使うんだ。

2. クラスの定義:class構文

まずは「たい焼きの金型」であるクラスを作ってみよう。
class クラス名: で定義するよ。クラス名の最初は大文字にするのがお作法(CapWords方式)だよ。

🐍 サンプルコードを見る(クリックで開閉)
# クラス(設計図)の定義
class Taiyaki:
    pass  # とりあえず何もしないクラス

# インスタンス化(たい焼きを焼く!)
# クラス名() でインスタンスが作られるよ
fish1 = Taiyaki()
fish2 = Taiyaki()

print(fish1)
print(fish2)
💻 実行結果:
<__main__.Taiyaki object at 0x…>
<__main__.Taiyaki object at 0x…>

実行結果を見ると、メモリ上の違う場所(at 0x…)に、別々のたい焼きオブジェクトが生まれたことがわかるね!

3. 【最重要】初期化メソッド __init__ と self の謎

たい焼きには中身(あんこ、クリーム)が必要だよね。
「インスタンスを作る(焼く)瞬間に、中身を決める」ために使うのが、特殊なメソッド __init__ だよ。

__init__(self, 引数...)
インスタンス生成時に自動で呼ばれるメソッド(コンストラクタ)。
ここで「そのインスタンス専用のデータ(属性)」を設定するよ。

そして、初心者を一番苦しめるのが self という言葉。
これは「今まさに焼こうとしている、そのたい焼き自身」を指す言葉なんだ。

🐍 中身入りのたい焼きを作る(クリックで開閉)
class Taiyaki:
    # 初期化メソッド(焼く時の設定)
    # self は「このたい焼き」自身のこと!
    def __init__(self, nakami, price):
        self.nakami = nakami  # このたい焼きの「中身」を登録
        self.price = price    # このたい焼きの「値段」を登録

# インスタンス化(__init__が自動で動く!)
# self は自動で渡されるから、nakami と price だけ指定する
fish_A = Taiyaki("あんこ", 150)
fish_B = Taiyaki("クリーム", 170)

# それぞれの中身を確認
print(f"Aは {fish_A.nakami} です")
print(f"Bは {fish_B.nakami} です")
💻 実行結果:
Aは あんこ です
Bは クリーム です

self.変数名 = 値 と書くことで、そのインスタンス専用の変数(インスタンス変数)としてデータを保存できるんだね。

4. メソッド:たい焼きにアクションを!

要するにこれは「そのモノができる動作(関数)」のこと!

クラスの中に定義した関数をメソッドと呼ぶよ。
メソッドも、第一引数に必ず self を受け取るのがルール。これがないと「誰が」泳ぐのか分からなくなっちゃうからね。

🐍 たい焼きを泳がせてみる(クリックで開閉)
class Taiyaki:
    def __init__(self, nakami):
        self.nakami = nakami

    # メソッド(動作)を定義
    def swim(self):
        print(f"{self.nakami}たい焼きは、お腹のあんこが重いけど泳いだ!")

fish = Taiyaki("あんこ")
fish.swim()  # 泳げ!
💻 実行結果:
あんこたい焼きは、お腹のあんこが重いけど泳いだ!

試験に出る!要注意ポイント

今回の範囲で、Python 3 エンジニア認定基礎試験によく出るポイントをまとめたよ!📝

① メソッドの第一引数 self

クラス内のメソッド定義では、第一引数(慣習的に self)が必須だよ。
呼び出す時(fish.swim())は引数を書かないけど、定義側(def swim(self):)には必要な点に注意!
(Pythonが裏側でこっそり swim(fish) みたいにインスタンスを渡してくれてるんだよ)

② クラス変数は「みんなで共有」

self.変数 は「個人の持ち物」だけど、クラスの直下に書いた変数は「みんなの共有物(クラス変数)」になるよ。
これを書き換えると、全たい焼きに影響が出る場合があるから区別して覚えよう!

💡 管理人の失敗エピソード
def __init__(self): って書くべきところを、スペルミスで def __int__(self): って書いちゃって、「初期化されない!データが入ってない!」って3時間くらい悩んだことがあるよ😭
アンダースコアは「前後2つずつ(__)」だよ!1つじゃないから気をつけて!

理解度チェック!ミニクイズ

クラスとインスタンス、イメージできたかな?
試験レベルの問題でチェックしてみよう!🔍

クラスのインスタンス化(生成)を行う正しいコードは?
class MyClass: pass
  1. obj = new MyClass()
  2. obj = MyClass()
  3. obj = MyClass
▼ クリックで正解を表示
正解: 2. obj = MyClass()

解説:
Pythonには new キーワードはないよ(Javaなどとは違う)。
関数呼び出しのように クラス名() と書くことでインスタンスが生成されるんだ。

インスタンス生成時に自動的に呼び出される初期化メソッドの名前は?
  1. __start__
  2. __init__
  3. __class__
▼ クリックで正解を表示
正解: 2. __init__

解説:
initialize(初期化)の略で __init__ だよ。
アンダースコアが前後に2つずつある特殊メソッド(ダンダーメソッド)の一つだね。

メソッドの第一引数(self)について正しい説明は?
  1. 呼び出す時に必ず値を指定する必要がある
  2. 定義する時には省略してもよい
  3. 定義する時には必須だが、呼び出す時は自動的に渡される
▼ クリックで正解を表示
正解: 3. 定義する時には必須だが、呼び出す時は自動的に渡される

解説:
obj.method() と呼ぶと、Pythonが自動的に obj を第一引数 self として渡してくれる仕組みなんだ。

まとめ:次回への引き

今回は「クラスとインスタンス」について解説したよ!
たい焼きのイメージで、「金型(クラス)」と「実体(インスタンス)」の関係がつかめたかな?✨

次回は、オブジェクト指向の華!
テーマは「親の能力を受け継ぐ!クラスの継承」だよ。
「たい焼き」クラスを改造して、「白いたい焼き」や「クロワッサンたい焼き」を作るようなもの。
既存のコードを再利用してパワーアップさせる「継承」の仕組みを学ぶよ!お楽しみに!👋✨

出典: Python公式チュートリアル
Copyright © 2001-2026 Python Software Foundation. Licensed under the PSF License.

よかったらシェアしてね!
  • URLをコピーしました!
目次