Pythonのクラスとは?定義・インスタンス・メソッドの使い方を解説

PR Python

Pythonのクラスとは?定義・インスタンス・メソッドの使い方を解説

💡 この記事でわかること

  • クラスとは何か、インスタンスとの関係
  • class での定義、__init__ と self の役割
  • 属性(インスタンスが持つデータ)とメソッド(クラス内の関数)
  • 関数だけで書く場合との違い、クラスを使うメリット
  • 継承(他のクラスの機能を引き継ぐ)の基本

1. クラスとは?

クラスとは、
👉 データ(属性)と処理(メソッド)をひとまとめにした「設計図」です。

💡 設計図であるクラスから、実際に使う「実体」を作ります。この実体をインスタンスと呼びます。たとえば「犬」という設計図(クラス)から、「ポチ」「ハチ」といった個々の犬(インスタンス)を作る、というイメージです。

それぞれのインスタンスは、自分専用のデータ(名前・年齢など)を持ちつつ、共通の処理(鳴く、など)を使えます。


2. クラスを定義する(class・__init__・self)

class Dog:
    def __init__(self, name, age):
        self.name = name   # 属性(このインスタンスの名前)
        self.age = age     # 属性(このインスタンスの年齢)

    def bark(self):
        print(f"{self.name}がワンと鳴きました")
  • class クラス名:で定義を始める(クラス名は大文字始まりが慣習)
  • __init__は、インスタンスを作るときに自動で呼ばれる初期化用のメソッド
  • selfは「そのインスタンス自身」を指す。属性やメソッドはself.〇〇で扱う

👉 メソッドの1つ目の引数は必ずselfにします。呼び出すときには自分で渡す必要はなく、Pythonが自動でセットしてくれます。


3. インスタンスを作って使う

pochi = Dog("ポチ", 3)   # インスタンスを作成(__init__が呼ばれる)
hachi = Dog("ハチ", 5)

print(pochi.name)   # ポチ(属性の参照)
print(hachi.age)    # 5

pochi.bark()   # ポチがワンと鳴きました
hachi.bark()   # ハチがワンと鳴きました

💡 クラス名(引数)でインスタンスを作れますpochihachiは同じDogクラスから作られていますが、それぞれ別の名前・年齢を持っています。


4. 属性とメソッド

  • 属性:インスタンスが持つデータ。self.nameのようにself.を付けて定義・参照する
  • メソッド:クラスの中で定義された関数。インスタンスの属性を読んだり書き換えたりできる

メソッドの中から、自分の属性を変更することもできます。

class Counter:
    def __init__(self):
        self.count = 0

    def increment(self):
        self.count += 1

c = Counter()
c.increment()
c.increment()
print(c.count)   # 2

👉 メソッドは「クラスに属している関数」です。関数の基本を復習したい場合は、こちらの記事も参考にしてください。

👉 Pythonの関数(def・引数・戻り値)についての記事はこちら


5. 使用例:買い物カゴ

「データ」と「そのデータを操作する処理」がセットになっている例として、買い物カゴをクラスにしてみます。

class Cart:
    def __init__(self):
        self.items = []   # 商品を入れるリスト

    def add(self, item):
        self.items.append(item)

    def count(self):
        return len(self.items)

cart = Cart()
cart.add("りんご")
cart.add("パン")

print(cart.items)     # ['りんご', 'パン']
print(cart.count())   # 2

💡 カゴの中身(items)と、それを操作するメソッド(addcount)が1つのクラスにまとまっています。使う側はcart.add(...)と書くだけで、内部でリストをどう管理しているかを気にせず済みます。

👉 クラスの中でよく使う、リストと辞書についての記事はこちら


6. 関数だけの場合との違い

関数クラス
まとめるもの処理だけデータ(属性)と処理(メソッド)をセット
状態(データ)の保持基本は持たないインスタンスごとに持てる
向いている場面入力→出力が明確な処理「モノ」を表現し、状態を持たせたいとき

👉 小さな処理はまず関数で十分です。「関連するデータと処理がいくつも増えてきて、まとめて扱いたい」と感じたときにクラスを検討しましょう。


7. 継承(他のクラスを引き継ぐ)

継承を使うと、あるクラスの機能を引き継いだ新しいクラスを作れます。共通部分を1回書けば済むようになります。

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

    def speak(self):
        print(f"{self.name}が鳴きました")

class Cat(Animal):        # Animal を継承する
    def speak(self):      # 同じ名前のメソッドで上書き(オーバーライド)
        print(f"{self.name}がニャーと鳴きました")

Animal("どうぶつ").speak()   # どうぶつが鳴きました
Cat("タマ").speak()          # タマがニャーと鳴きました

💡 class Cat(Animal):と書くと、CatAnimal__init__やメソッドをそのまま使えます。必要な部分だけ、同じ名前のメソッドを定義して上書きできます。継承は便利ですが、深くしすぎると複雑になるため、最初は「共通処理をまとめる程度」に留めるのがおすすめです。


8. クラス用語 早見表

用語意味
クラス設計図(classで定義)
インスタンス設計図から作った実体(Dog("ポチ", 3))
__init__インスタンス作成時に自動で呼ばれる初期化メソッド
selfそのインスタンス自身
属性インスタンスが持つデータ(self.name)
メソッドクラスの中で定義された関数
継承他のクラスの機能を引き継ぐこと

9. まとめ

  • クラスはデータと処理をまとめた設計図。そこからインスタンスを作って使う
  • __init__で初期化、selfでそのインスタンス自身を指す
  • 属性=インスタンスのデータ、メソッド=クラス内の関数
  • 小さな処理は関数で十分。状態を持つ「モノ」を表したいときにクラス
  • 継承で共通処理をまとめられる

👉 まずは__init__で属性を2〜3個持ち、メソッドを1つ作る、という小さなクラスから書いてみましょう。DjangoやFlaskなど、この先のフレームワークではクラスが当たり前に登場するので、ここで基本をつかんでおくと後がスムーズです。

-Python
-, , , ,