class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
@property
def age(self):
return self._age
@age.setter
def age(self, value):
if not isinstance(value, int):
raise TypeError("age must be an integer")
if value < 0 or value > 120:
raise ValueError("age must be between 0 and 120")
self._age = value
@age.deleter
def age(self):
del self._age
person = Person("Alice", 25)
#nameのgetter
print(person.name) # Alice
#nameのsetter
person.name = "Bob"
print(person.name) # Bob
#ageのgetter
print(person.age) # 25
#ageのsetter if条件があります。
person.age = 30
print(person.age) # 30
#ageのdeleter
del person.age
print(person.age) # AttributeError: 'Person' object has no attribute '_age'
-
getterメソッド:プロパティの値を取得するためのメソッドです。通常、プロパティの値を取得する際には、プロパティ自体を呼び出すだけで取得できますが、場合によっては明示的にgetterメソッドを定義することがあります。
-
setterメソッド:プロパティの値を設定するためのメソッドです。@property.setterデコレータを使用する場合は、このsetterメソッドが自動的に作成されます。しかし、場合によっては明示的にsetterメソッドを定義する必要があります。
-
deleterメソッド:プロパティを削除するためのメソッドです。@property.deleterデコレータを使用することで、このdeleterメソッドが自動的に作成されます。
デコレーターに関して
例としてperson.nemeでプロパティにアクセスする場合@propertyデコレータを使ってnameプロパティを取得する際にはgetterメソッドの名前はプロパティの名前と同じにする必要がある。