setter,getterの設定方法1(Propertyを利用)
カプセル化とは、オブジェクト指向の中心的な概念で、特定のプロパティやメソッドを外部から隠すことを意味する。
つまり、プロパティやメソッドに直接アクセスできずに、特定の処理を通じてしかアクセスができないようにすることを言う。
Pythonでは、カプセル化をするのに、setterとgetterを利用する。
プロパティはプライベートで宣言して、アクセスするには、getterとsetterを利用するようにする。
pythonのsetter、getterには、2つの定義方法がある。
1つ目は、get_変数名, set_変数名というメソッドを作成し、Propertyを用いて、setterとgetterを登録する方法である。
以下のようにする
def set_変数名():
変数名 = Property(get_変数名, set_変数名)

- Example
Example
- setter, getterの利用方法1
def __init__(self, name, age):
self.__name = name
self.__age = age
def get_name(self): # __nameのgetterの定義
print("getterを呼び出しました")
return self.__name # private変数の__nameを返す
def get_age(self): # __ageのgetterの定義
return self.__age
def set_name(self, value): #__nameのsetterの定義
print("setterを呼び出しました")
self.__name = value # private変数の__nameを設定する
def set_age(self, value): #__ageのsetterの定義
self.__age = value
name = property(get_name, set_name) # property関数を利用して,nameに対しsetter, getterを設定する
age = property(get_age, set_age)
man = Human("Taro", 23)
print(man.name) # man.nameとすると、get_nameが呼び出され、"getterを呼び出しました"と表示される
man.name = "Jiro" # man.name = とすると、set_nameが呼び出され、"setterを呼び出しました"と表示される
print(man.name) # Jiroと表示
print(man.age) # 23と表示
setter,getter,(deleter)の設定方法2(@property,@var.setter,@var.deleter)
pythonにgetterとsetterを設定して、カプセル化する方法にはもう1つある。
また、deleterと呼ばれる、インスタンスから変数を削除する場合に呼び出される関数も定義できる。
@property
def 変数名(self):
@変数名.setter
def 変数名(self, value):
@変数名.deleter
def 変数名(self):
- Example
Example
- setter, getterの利用方法2
def __init__(self, name, age):
self.__name = name
self.__age = age
@property # @propertyとすると、nameプロパティのgetterとして定義できる
def name(self):
print("getterを呼び出しました")
return self.__name
@property# @propertyとすると、ageプロパティのgetterとして定義できる
def age(self):
return self.__age
@name.setter # nameプロパティのsetterとして定義する
def name(self, value):
print("setterを呼び出しました")
self.__name = value # privateの変数、__nameを設定する
@age.setter # ageプロパティのsetterとして定義する
def age(self, value):
self.__age = value
@name.deleter # nameプロパティのdeleterとして定義される
def name(self):
print("deleterを呼び出しました")
del self.__name
@age.deleter
def age(self):
del self.__age
man = Human("Taro", 20)
print(man.name) # man.nameとするとnameのsetterが呼び出され、__nameが表示される
man.name = "PP" # man.name = ""とするとnameのgetterが呼び出され、__nameの値が変更される
del man.name # del man.nameとするとnameのdeleterが呼び出され、__nameが表示削除される