カプセル化と情報隠蔽

ゲッターとセッター(プロパティ)

さっき、カプセル化や情報隠蔽の話をしたよね。じゃあ、もしカプセルに隠したデータの中身を見たり、安全に変更したりしたいときはどうすればいいんだろう?

そのための方法が、「ゲッター(Getter)」と「セッター(Setter)」という特別なメソッドなんだ。そして、Pythonにはもっとスマートな方法として「プロパティ(Property)」という機能もあるよ。

ゲッター

ゲッター」は、オブジェクトの中に隠されているデータ(属性)の値を取得するためのメソッドだよ。まるで、カプセルの中身をこっそり覗く窓みたいなものだね。

セッター

セッター」は、オブジェクトの中に隠されているデータ(属性)の値を安全に設定するためのメソッドだよ。ただ値を設定するだけじゃなくて、「この値は正しくないから設定できないよ」ってチェックすることもできるんだ。

例を挙げてみよう。ゲームのキャラクターの「体力(HP)」を考えてみて。HPは、ゼロより小さくなったり、最大値を超えたりしないように、ちゃんと管理したいよね?


class GameCharacter:
    def __init__(self, name):
        self.name = name
        # 体力は直接変更させないように、頭にアンダースコアをつけて「保護された変数」にするよ
        self._hp = 100 # 初期体力は100

    # ゲッター:_hpの値を取得するメソッド
    def get_hp(self):
        return self._hp

    # セッター:_hpの値を設定するメソッド。ここで値のチェックもできるよ
    def set_hp(self, new_hp):
        if new_hp < 0:
            self._hp = 0 # 0より小さくならないようにする
            print("体力は0以下にはなりません!")
        elif new_hp > 100:
            self._hp = 100 # 100より大きくならないようにする
            print("体力は最大値を超えません!")
        else:
            self._hp = new_hp

hero = GameCharacter("勇者")
print(f"{hero.name}の体力: {hero.get_hp()}") # 出力: 勇者の体力: 100

hero.set_hp(50) # 体力を50に設定
print(f"{hero.name}の体力: {hero.get_hp()}") # 出力: 勇者の体力: 50

hero.set_hp(-10) # 体力を-10に設定しようとすると...
print(f"{hero.name}の体力: {hero.get_hp()}") # 出力: 体力は0以下にはなりません! / 勇者の体力: 0

このように、ゲッターとセッターを使うことで、データの値が間違って設定されないように、きちんと「ルール」を作ることができるんだ。これは、大きなプログラムを作る上で、とっても大切なことなんだよ。

次のレッスンでは、もっとPythonらしいスマートなプロパティの使い方を学ぶから、楽しみにしていてね!