さっき、カプセル化や情報隠蔽の話をしたよね。じゃあ、もしカプセルに隠したデータの中身を見たり、安全に変更したりしたいときはどうすればいいんだろう?
そのための方法が、「ゲッター(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らしいスマートなプロパティの使い方を学ぶから、楽しみにしていてね!