Day 91プロパティデコレータの使い方
Pythonコード
1class Person:2 def __init__(self, name, age):3 self._name = name4 self._age = age5 @property6 def name(self):7 return self._name8 @name.setter9 def name(self, value):10 if not isinstance(value, str):11 raise TypeError('名前は文字列でなければなりません')12 self._name = value13 @property14 def age(self):15 return self._age16 @age.setter17 def age(self, value):18 if not isinstance(value, int) or value < 0:19 raise TypeError('年齢は0以上の整数でなければなりません')20 self._age = value21 22person = Person('山田', 30)23print(person.name)24print(person.age)25 26person.name = '田中'27person.age = 3128print(person.name)29print(person.age)
解説
- 行1〜4: Personクラスを作成します。このクラスには、名前と年齢を保持するための__init__メソッドが定義されています。_nameと_ageは、クラス内で使用されるプライベート変数です。__init__メソッドは、クラスのインスタンスが作成されたときに自動的に呼ばれます。
- 行5〜7: @propertyデコレータを使用して、nameのゲッターを定義します。ゲッターは、オブジェクトの属性にアクセスするためのメソッドです。@propertyデコレータは、属性にアクセスするためのgetterメソッドを定義するために使用されます。
- 行8〜12: @name.setterデコレータを使用して、nameのセッターを定義します。セッターは、オブジェクトの属性を設定するためのメソッドです。ここでは、設定する値の型をチェックしています。isinstance()関数は、オブジェクトが指定されたクラスのインスタンスであるかどうかを確認するために使用されます。
- 行13〜16: @propertyデコレータを使用して、ageのゲッターを定義します。@age.setterデコレータを使用して、ageのセッターを定義します。ここでは、設定する値の型と範囲をチェックしています。
- 行22〜24: Personクラスのインスタンスを作成し、nameとageの属性にアクセスして値を出力します。print()関数は、指定された値を画面に表示するために使用されます。
- 行26〜29: nameとageの属性に新しい値を設定し、再び出力します。
次に試してみよう
- Personクラスに新しい属性を追加してみましょう。
- nameとageのセッターで、さらに厳格なチェックを追加してみましょう。
- Personクラスを継承した新しいクラスを作成してみましょう。