特殊属性 @property
主要是实现其他语言所拥有的getter和setter功能
作用:
用来模拟一个属性
通过@property装饰器,可以对模拟属性的赋值和取值加以控制
举个简单的栗子:
class Student:
def __init__(self, s):
self.__score = s
# 设置__score的值
def setScore(self, s):
if 0 <= s <= 100:
self.__score = s
# 得到__score的值
def getScore(self):
return self.__score
s = Student(50) # 创建一个实例对象
s.setScore(100) # 修改成绩
print(s.getScore()) # 得到成绩 100
以上是一个正常的写法,经过加工后:
class Student:
def __init__(self, s):
self.__score = s
@property
def score(self):
print('getter被调用')
return self.__score
@score.setter
def score(self, s):
print('setter被调用')
if 0 <= s <= 100:
self.__score = s
s = Student(50)
# s.setScore(100)
s.score = 100
score = s.score
print('成绩是{}'.format(score))
- 这两个函数必须要同名
执行过程:
s.score = 100是设置,会调用@score.setter装饰器的score函数
此时打印:setter被调用
score = s.score其中的s.score是调用,会调用@property装饰的score函数,
打印:getter被调用,并将__score值返回,用score绑定
print(‘成绩是{}’.format(score)) 打印的就是返回的score的值 100
本节完