1.应用场景
getter: 获取对象属性的值之前想要做点儿别的事情,就给这个属性添加getter
setter: 给对象属性赋值之前想要做点儿别的事情,就给这个属性添加setter
2.getter
第一步:声明属性的时候在属性名前加_
第二步: 声明函数(函数没有除了self以外的参数,但是要与返回值。返回值就是获取属性拿到的值)
@property
def 去掉的属性名(self):
做点别的事情
返回属性的值
第三步:在类的外部通过对象.去掉的属性去获取相关的属性
3.setter - 想要添加setter必须先要有getter
第一步:声明属性的时候在属性名前加_
第二步: 声明函数(函数除了self以外还需要一个参数,没有返回值。这儿的参数代表给属性赋的值)
@属性名去掉.setter
def 去掉的属性名(self, 参数):
做点别的事情
给属性赋值
第三步:在类的外部通过对象.去掉_的属性去给相关属性赋值
class Person:
def __init__(self, name=''):
self.name = name
self._age = 0
self._week = 7 # 属性名前有_,使用属性的时候不要直接用
@property
def age(self):
return self._age
# 给age添加setter
@age.setter
def age(self, value):
if not isinstance(value, int):
raise ValueError
if not (0 <= value <= 150):
raise ValueError
self._age = value
# 给week添加getter
@property
def week(self):
if self._week < 7:
return '星期%d' % self._week
else:
return '星期天'
@week.setter
def week(self, value):
self._week = value
def main():
p1 = Person('小明')
# 通过不带_的属性给属性赋值实质是在调用setter对应的函数
p1.age = 45
p1.age = 3
# 这个操作实质是在调用week函数
# 通过不带_的属性来获取属性的值实质是在调用getter对应的函数
print(p1.week)
p1.week = 4
网友评论