49
32

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初心者がはじめに学ぶべきなのはfor文でもif文でもなくオブジェクト指向という話

Last updated at Posted at 2025-05-07

0.はじめに

現在、プログラミングの脱落率は80〜90%とも言われています。
「難しい」「意味が分からない」「エラーで詰んだ」といった理由で、多くの初学者が最初の数週間で挫折してしまいます。

その原因の多くは、「for文」や「if文」から始まる“手続き型”の学習スタイルにあります。

もちろん、それらは大切な構文です。
でも、これらを学んでもPythonが「わかる」ようにはなりません。

Pythonにおいて「for文」や「if文」は、人間で言えば行動や動作にあたります。
たとえば「歩く」「話す」「手を上げる」といった、一つひとつの具体的なアクションです。

もちろんそれらは必要です。でも、それだけを知っても“その人”を理解したことにはなりません。

本当に重要なのは、その人の「性格」や「生き方」、つまり“なぜそう動くのか”を知ること。

Pythonにおけるその考え方こそが、オブジェクト指向なのです。

本記事では、なぜオブジェクト指向を先に学ぶべきなのかを、初心者の視点に立って解説していきます。

1. なぜ「オブジェクト指向」から学ぶべきなのか?

1-1. 手続き型は“命令の羅列”に過ぎない

多くの教材は、次のようなコードから始まります。

for i in range(5):
    if i % 2 == 0:
        print(i, "は偶数です")

このコードはPythonっぽく見えるかもしれませんが、Pythonという言語が本来もっている設計哲学や強みとは、無関係です。

1-2. オブジェクト指向は“人格のある部品”を作る

一方、オブジェクト指向ではこう考えます。

「数値」を処理する“人”を作ろう

その人に「偶数か判定する能力」や「ログを出す能力」を持たせよう

class NumberAnalyzer:
    def __init__(self, number):
        self.number = number

    def is_even(self):
        return self.number % 2 == 0

    def print_info(self):
        if self.is_even():
            print(f"{self.number} は偶数です")

num = NumberAnalyzer(4)
num.print_info()

これは、単なる動作命令ではありません。「数値を分析する人格(NumberAnalyzer)」を設計しているのです。
この設計こそが、Pythonの本当の強みです。
Pythonは「書きやすさ」や「ライブラリの豊富さ」だけで選ばれる言語ではありません。
その本質は、「現実のものごとを“性格を持ったオブジェクト”として捉え、定義できる」という柔軟で人間的な設計思想にあります。

2. オブジェクト指向とは何か?

オブジェクト指向(OOP: Object-Oriented Programming)とは、
現実世界を「オブジェクト(=モノ)」としてとらえ、それらが持つ性質(属性)や、できること(振る舞い)をセットで設計するという発想です。

たとえば「猫」を考えてみましょう。

名前がある(属性)

鳴く、歩く(振る舞い)

これをコードで表現すれば、次のようになります:

class Cat:
    def __init__(self, name):
        self.name = name

    def meow(self):
        print(f"{self.name} がニャーと鳴いた")

ここで Cat は「猫とはこういうものだ」という概念の定義です。
ミケ = Cat("ミケ") のようにすれば、「ミケという名前の猫」が生まれます。

3. Pythonでオブジェクトを設計する方法

オブジェクト指向を理解するための核心は、「モノを設計し、そのモノが自分で動けるようにする」という考え方です。
Pythonではこれを クラス・属性・メソッド という仕組みで実現します。

3-1. クラス(Class)=「モノの設計図」

クラスとは、「こういうモノがあったらいいな」という概念の定義です。
たとえば、猫を作りたいとき、まずは「猫とは何か?」を考えるところから始まります。

class Cat:
    pass

この時点では「猫の設計図」ができただけで、まだ猫は存在していません。
でもこれがあることで、何匹でも猫を生み出せるようになります。

3-2. インスタンス(Instance)=「実体化したモノ」

クラスは設計図。そこから現実に動くモノを作るのがインスタンスです。

mike = Cat()

この一行で、「ミケ」という名前の猫(オブジェクト)が生まれます。
これが「インスタンス化」と呼ばれるプロセスです。

3-3. 属性(Attribute)=「モノの性質・状態」

インスタンスが持つ情報、つまりそのモノがどういう状態にあるかを表すのが「属性」です。

class Cat:
    def __init__(self, name, age):
        self.name = name      # 属性1:名前
        self.age = age        # 属性2:年齢

self.name や self.age は、その猫が持っている個別の性質です。

self は「自分自身の猫」を指します。

mike = Cat("ミケ", 3)
print(mike.name)  # ミケ
print(mike.age)   # 3

3-4. メソッド(Method)=「モノができること・動作」

次に、「猫が何をできるか(=動作)」を定義するのがメソッドです。

class Cat:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def meow(self):
        print(f"{self.name} がニャーと鳴いた")

メソッドは「猫の行動」を表します。

呼び出すと、インスタンスに応じた振る舞いをします。

mike = Cat("ミケ", 3)
mike.meow()  # ミケ がニャーと鳴いた

4. なぜオブジェクト指向が便利なのか?

オブジェクト指向が登場する前、プログラムはすべて「順番に並べた命令の集まり」でした。
それは、規模が大きくなるとすぐに破綻します。

name = "ミケ"
print(name + " がニャーと鳴いた")

name2 = "タマ"
print(name2 + " がニャーと鳴いた")

猫が3匹、10匹…と増えたらどうなるでしょう?
同じコードをコピーして名前を変える?
それでは管理も拡張もできません。
一方、オブジェクト指向では自由に拡張できます。

mike = Cat("ミケ")
tama = Cat("タマ")
hana = Cat("ハナ")

for neko in [mike, tama, hana]:
    neko.meow()

猫という“モノ”の定義があるから、あとは「誰が登場するか」だけを考えればよいのです。
この柔軟性が、オブジェクト指向最大の強みです。

5.終わりに

オブジェクト指向は、単なるコード整理のための技法ではありません。
「データ」と「そのデータに関する処理」を1つの単位(クラス)にまとめ、再利用性・拡張性・保守性を高める設計手法です。

Pythonはすべてがオブジェクトで構成されているため、クラス・属性・メソッドの理解は避けて通れません。
むしろ早い段階でこの考え方に慣れることで、後に扱うPandasやDjangoのようなライブラリも直感的に使えるようになります。

49
32
4

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
49
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?