0
1

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】初学者の私が躓いたこと②

0
Last updated at Posted at 2026-05-13

前の記事では、クラス・インスタンス・変数の関係を整理しました。

  • Cookie(クラス)→ クッキー型。設計図。
  • Cookie("星型")(インスタンス)→ 実際に焼いたクッキー1枚。
  • cookie(変数)→ そのクッキーに貼った名札。

そして最後に「それぞれが自分専用の保存場所を持っているから、中身が混ざらない」という話をしました。

じゃあその保存場所ってどうやって作るの? というのが今回のテーマです。
答えは self.shape = shape の中にあります。


self.shape = shape の左右は何が違うの?

ここにも左右で同じ文字列が………(苦手意識)
正体はというと。

self.shape = shape
# 左:このクッキー専用の保存場所
# 右:外から渡されたデータ

こうなります。
えぇ、つまりどういうこと??と思いますよね。私も思います。
ですので、少し深掘りして考えたいと思います。
繰り返しになりますが、右の shape は、「外から渡されたデータ」です。
そして左の self.shape は、「このクッキーが自分専用で持つデータ」です。

cookie = Cookie("星型")
#                ↑ この "星型" が shape として受け取られる

self は「自分自身(このインスタンス)」を指す言葉で、.shape はそのデータにつけた名前です。
self がなぜここに出てくるのか、詳しくは別の機会に……!)

  • 右側の shape は、その場限りの「引数(ひきすう)」
  • 左側の self.shape は、ずっと保持される「インスタンス変数」

【イメージ訳】「いま届いた材料(shape)を、自分専用の倉庫(self.shape)に保管せよ!」

つまり1行でやっていることは、「渡された形を、このクッキー自身のデータとして保存する」 それだけです。

引数名(右側)は自由につけられますが、self.shapeshape という名前はあとで cookie.shape として読み出すときと合わせる必要があります。

>引数名(右側)は自由につけられる
これを証明するために、試しに引数名を変えてみます。

class Cookie:
    def __init__(self, mold):    # 引数名を mold にした
        self.shape = mold        # self.shape の名前は変えていない

cookie = Cookie("星型")
print(cookie.shape)  # → 星型

ちゃんと動いてくれます!

cookie1cookie2 は同じ型紙から生まれても、それぞれ自分専用のデータを持っているので、中身が混ざることはありません。


__init__ って何?

ところで、さっきから self.shape = shape という処理が __init__ の中に書かれていましたね。この __init__ って何者なのでしょう。
初見だとびっくりしませんか、ちなみに。私はしました。
_init_ならまだわかるけど、アンダースコアが2本連なっているんですよ、左右両方に。
何者だよと思いませんか?
これ、Pythonの世界では「ダンダー(dunder)」と呼ばれているそうです。double underscoreの略です。__init__ は「ダンダーイニット」。
すごい、どこかの呪文みたいな名前です。

class Cookie:
    def __init__(self, shape):
        self.shape = shape

やや話が逸れましたが、__init__ は、「インスタンスが生まれた瞬間に自動で走る初期設定の処理」 です。

Cookie("星型") と書いた瞬間、Pythonは勝手に __init__ を呼び出します。
焼きたてのクッキーはまだ真っさらな状態なので、そこに名札をつけたりする初期作業を自動でやってくれる係、というイメージです。頼りになります。


cookie.shape はどうやって読んでるの?

print(cookie.shape)  # → 星型

cookie.shape は「cookie という名札のついたクッキーの、shape データを取り出す」という意味です。

ドット(.)は「〜の中の〜」と読めば大体あってます。


全部つなげて読んでみる

最初に見たコードに戻ってみましょう。

# 1. クッキーの型紙(設計図)を用意
class Cookie:
    def __init__(self, shape): 
# 2. 焼いた瞬間に、「渡されたデータ」を「自分専用の保存場所」に入れる
        self.shape = shape

# 3. 型紙を使って、実際にクッキーを焼く(インスタンス化)
#    焼いたクッキーに「cookie」という名札(変数名)をつける
cookie = Cookie("星型")

# 4. 名札がついたクッキーの「中身(データ)」を取り出す
print(cookie.shape)  # → 星型

最初はまったく読めなかったこのコード、今はこう読めます。

  1. Cookie という型紙を定義する
  2. Cookie("星型") でクッキーを焼く(このとき __init__ が動いて形を保存)
  3. 焼いたクッキーに cookie という名札をつける
  4. cookie.shape でそのクッキーの形を取り出す

まとめ

疑問 答え
__init__ は何? インスタンスが生まれた瞬間に走る初期設定
self.shapeshape の違いは? 左はこのインスタンス専用のデータ、右は渡されたデータ
cookie.shape は何をしてる? そのクッキーの shape データを取り出している

次の記事では、今回と繋がる「同じ名前が2回出てくる」パターンをさらに深掘りします。
calendar.calendar(2026) などは、初学者が必ず「えっ、何このミスプリントみたいなコード?」と思う部分です。
次回はこのような、「住所(モジュール)」と「名前(関数)」がたまたま同じせいで二度見してしまうパターンを攻略します!

※予定※

calendar.calendar(2026)     # calendarが2回!?
json.dump(fp=fp, obj=data)  # fpが2回!?
0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?