应用场景
-
getter: 获取对象属性的值之前想要做点儿别的事情,就给这个属性添加getter
-
setter: 给对象属性赋值之前要做点别的事情,就给这个属性添加setter
getter
-
第一步 声明属性的时候在属性名前加_
-
第二步:声明函数(函数没有除了self以外的参数,但是要有返回值,返回值就是获取属性要拿到的值
@property
函数名是去掉下划线的属性名
def 去掉\_的属性名(self):
做点别的事情
返回属性的值
- 第三步:在类的外部通过对象.去掉下划线的属性去使用或获取相关的属性
setter - 想要添加setter,必须先要有getter
-
第一步:声明属性的时候在属性名前加_
-
第二步:声明函数(函数除了self以外,还需要一个参数,没有返回值,这儿的参数代表给属性赋的值)
@属性名去掉\_.setter
def 函数名是去掉下划线的属性名(self, 参数):
给属性赋值
做点别的事情
-`第三步: 在类的外部通过对象.去掉_的属性去给相关属性赋值
class Ql_Person: #
"""
类说明文档:
"""
def __init__(self, name = ''):
"""
函数说明文档:
"""
self.name = name
self._age = 0
self._week = 7 # 属性名前有_, 使用属性的时候不要直接用
# 添加getter
@property
def age(self): #
"""
函数说明文档:
"""
return self._age
# 添加setter
@age.setter
def age(self, age):
if not isinstance(age, int):
raise ValueError
if not 10 <= age <= 150:
raise ValueError
else:
self._age = age
# 添加getter
@property
def week(self):
if self._week < 7:
return '星期%d' % self._week
else:
return '星期天'
def ql_(self, x): #
"""
函数说明文档:
"""
pass
return
def main():
p1 = Ql_Person('小明')
#通过不带_下划线的属性给属性赋值实质是在调用setter对应的函数
p1.age = 3
p1.age = 'sjd'
print(p1.week) #实质是在调用@property的week函数,因为有@property,所以不用加括号就可以调用函数,如果没有@property,就要加括号
# 通过不带_的属性来获取属性的值实质实在调用getter对应的函数
p1.week = 4 #不会报错,但不推荐,因为没有添加setter
if __name__ == '__main__':
main()
网友评论