getter和setter
1.getter 和 setter的作用
getter作用:在獲取某個(gè)屬性值之前做別的事情,就給這個(gè)屬性添加getter
setter作用:如果在給屬性賦值之前想要做別的事情,就給這個(gè)屬性添加setter
2.怎么添加getter和setter
1)getter
第一步:在需要添加getter的屬性名之前加_
第二步:定義getter對(duì)應(yīng)的函數(shù)(1.需要@property裝飾器,2。函數(shù)名就是不帶_的屬性名 3. 函數(shù)需要一個(gè)返回值)
第三步:獲取屬性值的通過(guò):對(duì)象.不帶下劃線的屬性名(本質(zhì)就是在調(diào)用getter對(duì)應(yīng)的函數(shù),取到屬性值就是函數(shù)的返回值)
2)setter
如果想要給屬性添加setter,必須先給屬性添加getter
第一步:添加getter
第二步:定義setter對(duì)應(yīng)的函數(shù)(1.需要@getter函數(shù)名.setter 裝飾器 2.函數(shù)名就是不帶下劃線的屬性名 3. 需要一個(gè)參數(shù)不需要返回值,這個(gè)參數(shù)就是嘗試給屬性賦的值)
第三步:給屬性賦值:對(duì)象.不帶下劃線的屬性名 = 值 (本質(zhì)就是在調(diào)用setter對(duì)應(yīng)的函數(shù))
class Rect:
def __int__(self, length=0, width=0):
self.length = length
self.width = width
self._area = length*width
@property
def area(self):
self._area = self.width * self.length
return self._area
@area.setter
def area(self,value):
raise ValueError
r1 = Rect(4, 5)
# print(r1.area)
# 不能讓矩形直接修改面積的屬性值
# r1.area = 100
# print(r1.__dict__)
# r1.width = 10
# print(r1.area)
# r1,length = 10
# print(r1.area)
# r1.area = 199