@property 可以将一个方法的调用方式变成 “属性调用”。
为什么用 property : 希望将访问私有属性和普通属性的方式变得一致
与property相关的两个装饰器:
setter : 用点语法 给属性赋值时触发
deleter: 用点语法删除属性时触发
class Student:
def __init__(self,name,salary):
self.__name = name
self.__salary = salary
def get_salary(self):
return self.__salary
def set_salary(self,salary):
if 1000< salary < 50000:
self.__salary = salary
else:
print('录入错误!')
S1 = Student('小明', 18)
print(S1.get_salary())
S1.set_salary(2000)
print(S1.get_salary())
装饰器在不修改原方法代码,添加新的功能
class Student:
def __init__(self,name,salary):
self.__name = name
self.__salary = salary
# 添加装饰器
@property
def salary(self):
return self.__salary
# 先执行装饰器的方法(在原salary方法添加if判断)
@salary.setter
def salary(self,salary):
if 1000< salary < 50000:
self.__salary = salary
else:
print('录入错误!')
S1 = Student('小明', 18)
print(S1.salary)
S1.salary = 2000
print(S1.salary)