【Python】クラスとその使い方をざっくり解説

【Python】クラスとその使い方をざっくり解説

クラスとは

クラスとは、オブジェクト指向プログラミングにおける設計図のようなものです。Pythonでは、クラスを定義して、それを基にオブジェクト(インスタンス)を作成します。クラスは属性(データ)とメソッド(処理)を持ちます。

クラスの定義

Pythonではclassキーワードを使ってクラスを定義します。基本的なクラスの定義方法を示します。

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

このクラスには、nameageという属性を持つコンストラクタ(__init__メソッド)があります。

インスタンスの作成

クラスを定義したら、それを使ってオブジェクト(インスタンス)を作成できます。

p1 = Person("太郎", 30)
p2 = Person("花子", 25)

こうすることで、異なるデータを持つ複数のオブジェクトを作成できます。

メソッドの種類

クラスには主に3種類のメソッドがあります。

インスタンスメソッド

通常のメソッドで、インスタンスごとに動作します。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def greet(self):
        return f"こんにちは、私は{self.name}です。"

クラスメソッド

クラス全体で共有されるメソッドです。@classmethodデコレータを使います。

class Person:
    population = 0
    
    def __init__(self, name):
        self.name = name
        Person.population += 1
    
    @classmethod
    def get_population(cls):
        return cls.population

スタティックメソッド

インスタンスやクラスを参照しないメソッドです。@staticmethodを使います。

class Math:
    @staticmethod
    def add(x, y):
        return x + y

継承

既存のクラスを基に新しいクラスを作成できます。

class Animal:
    def __init__(self, name):
        self.name = name
    
    def speak(self):
        return "音を出す"

class Dog(Animal):
    def speak(self):
        return "ワンワン"

カプセル化

データを隠蔽し、不正なアクセスを防ぐ仕組みです。

class BankAccount:
    def __init__(self, balance):
        self.__balance = balance  # __ をつけてプライベート属性にする
    
    def deposit(self, amount):
        self.__balance += amount
    
    def get_balance(self):
        return self.__balance

ポリモーフィズム

異なるクラスでも同じインターフェースを持たせることができます。

class Bird:
    def speak(self):
        return "ピヨピヨ"

class Cat:
    def speak(self):
        return "ニャーニャー"

animals = [Bird(), Cat()]
for animal in animals:
    print(animal.speak())

特殊メソッド

Pythonのクラスには、特定の動作をカスタマイズできる特殊メソッド(マジックメソッド)があります。

代表的な特殊メソッド

  • __init__: コンストラクタ
  • __str__: 文字列化
  • __len__: len()の挙動
  • __getitem__: インデックスアクセス

例: __str__ メソッド

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

    def __str__(self):
        return f"{self.name}, {self.age}歳"

p = Person("太郎", 30)
print(str(p))  # 太郎, 30歳

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です