はじめに
普段はスマホ中心でPython学習を進めています。
ProgateやSololearnで、スキマ時間に少しずつ積み上げる形です。
※スマホからPython学習を始めた理由については、こちらの記事で書いています
クラス周りにも少し慣れてきた頃、
ふと「__init__って本質的には何をしているんだろう?」と気になりました。
頭では理解しているつもりでも、どこか“ふわっとしている感覚”があったからです。
そこで久しぶりにPCを開き、実際にコードを書いて動かしてみることにしました。
PC環境の準備
学習用にローカルへPython環境は構築済みでした。
- VS Codeで新規 .py ファイルを作成
- 比較用に init_compare.py を用意
- ターミナルから実行確認
やったことはシンプルですが、「自分で書いたコードを自分で実行する」という感覚は、スマホ学習とは明らかに違いました。
__init__なしパターン
まずは、あえて init を使わないクラスを書いてみました。
class BoatRacer:
pass
racer1 = BoatRacer()
racer1.name = “Tanaka”
racer1.age = 32
インスタンス生成後に属性を追加する形です。
そして未定義の属性にアクセスすると、
しっかり AttributeError が出ます。
このとき感じたのは、「未完成のインスタンスが普通に存在できてしまうんだ」ということでした。
__init__ありパターン
次に init を使ったパターンです。
class BoatRacer:
def init(self, name, age):
self.name = name
self.age = age
racer1 = BoatRacer(“Tanaka”, 32)
インスタンス生成と同時に属性を必ずセットする構造になります。
ここで気づいたのは、__init__はコードを短くするための機能ではなく、「不完全な状態を作らせない設計装置」なのではないかということでした。
小さなコードでは差は小さく見えます。
でもデータ分析やオブジェクトが増えたとき、この差は大きくなりそうと感じました。
リストでオブジェクトを扱う
さらに、オブジェクトをリストに入れて回してみました。
racers = [racer1, racer2]
for racer in racers:
print(racer.name)
このとき初めて、クラス=概念、オブジェクト=ちゃんと存在している“実体”という感覚が生まれました。
print(type(racer1)) を実行したとき、
「あ、ちゃんと存在しているんだ」と実感できたのが印象的でした。
エラーは怖くない
AttributeError を実際に体験してみて思ったのは、
エラーは怖いものではなく、情報だということです。
なぜ起きたのかが理解できると、むしろ「なるほど」と思える。
スマホ学習ではあまり“壊す”ことはありません。
PCでは、あえて触ってみることで理解が深まる感覚がありました。
スマホとPCは役割が違った
今回一番大きな気づきはここです。
スマホ:
- 型に慣れる
- 流れを掴む
- 継続しやすい
PC:
- 自分で書く
- 壊してみる
- 比較して考える
どちらが上という話ではなく、
役割がまったく違うと感じました。
以前は学習の順番についても整理しましたが、
今回は“媒体そのものの違い”を体感できた感覚に近いです。
触ってみる派でいい
完璧に理解してから実践するのではなく、
触りながら理解が深まる。
今回のPC学習で一番楽しかったのは、「分かった」瞬間よりも「試してみた」時間でした。
やってみると、抽象的だったものが一気に具体に変わる。
スマホで慣れる。PCで触ってみる。
この組み合わせは、自分にはかなり合っていそうです。
まとめ
スマホとPCは同じPython学習でも、体験の質が違いました。
- スマホは“慣れる場所”
- PCは“触ってみる場所”
今回PCでコードを書いてみたことで、理解が“概念”から“体感”へ一歩進んだ気がします。
まだ初級レベルですが、この違いに気づけただけでも大きな収穫でした。
