2-6. オブジェクト指向プログラミング(OOP)徹底理解

クラス定義とコンストラクタ(init)

Python

class Character:
    # クラス変数(全インスタンス共通)
    species = "Human"

    def __init__(self, name, hp):
        # インスタンス変数(個別保持)
        self.name = name
        self.hp = hp

    def take_damage(self, amount):
        self.hp -= amount
        print(f"{self.name}は{amount}ダメージを受けた!(残りHP: {self.hp})")

メソッドの種類(@classmethod / @staticmethod)

Python

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

    # インスタンスメソッド
    def show_info(self):
        print(f"Player: {self.name}")

    # クラスメソッド(クラス自体を操作・ファクトリメソッドに利用)
    @classmethod
    def create_guest(cls):
        return cls("ゲスト")

    # 静的メソッド(インスタンスやクラスの状態に依存しないユーティリティ)
    @staticmethod
    def is_valid_name(name):
        return len(name) <= 10

継承と super() 関数・カプセル化

Python

class Hero(Character):
    def __init__(self, name, hp, mp):
        super().__init__(name, hp)  # 親クラスのコンストラクタ実行
        self.__mp = mp              # プライベートメンバ (__で難読化)

    @property
    def mp(self):
        """ゲッター"""
        return self.__mp

    @mp.setter
    def mp(self, value):
        """セッター(不正な値を防御)"""
        if value < 0:
            raise ValueError("MPは0以上にしてください")
        self.__mp = value

特殊メソッド(ダブスタ/Dunder Method)

Python

class Book:
    def __init__(self, title, price):
        self.title = title
        self.price = price

    def __str__(self):
        # print()時や文字列変換時の表示
        return f"『{self.title}』({self.price}円)"

    def __len__(self):
        # len()適用時の動作
        return len(self.title)

book = Book("Python完全マスター", 3000)
print(book)        # 『Python完全マスター』(3000円)
print(len(book))   # 12

コメント

タイトルとURLをコピーしました