@property的简单用法
- @property 可以将一个方法的调用方式变成属性调用
#测试@property,简化的用法
class Employss:
@property
def salary(self):
print("salary")
return 10000
emp1 = Employss()
# emp1.salary() 使用@property装饰后可以直接用下面方法调用
print(emp1.salary)
使用场景:
假定一个使用场景,先用函数方法解决
- 定义一个简单的新类,此时可以正常使用。假如把 s1.salary当作用户输入项,薪资没有复数,就需要增加一些限制条件。
class Emp():
def __init__(self,name,salary):
self.name = name
self.salary = salary
s1 = Emp("YHK",20000)
print(s1.salary)
s1.salary = -20000
print(s1.salary)
- 首先在 self.name 和 self.salary 前面增加 __ 设为不可直接访问:这时就无法直接调用s1.__salary
class Emp():
def __init__(self,name,salary):
self.__name = name
self.__salary = salary
s1 = Emp("YHK",20000)
print(s1.salary)
s1.salary = -20000
print(s1.salary)
更改为:
class Emp():
def __init__(self,name,salary):
self.__name = name
self.__salary = salary
#设置读取salsary的方法
def get_salary(self):
return self.__salary
#设置更改salsary的方法,并且增加规则
def set_salary(self,salary):
if 1000<salary<50000:
self.__salary = salary
else:
print("请输入正确的值")
s1 = Emp("YHK",20000)
print(s1.get_salary())
s1.set_salary(-20000)
print(s1.get_salary())
s1.set_salary(30000)
print(s1.get_salary())
输出结果依次为:
- 20000 #读取成功s1赋值
- 请输入正确的值 #设置数据不符合条件
- 20000 #数据未修改,返回之前保留的值
- 30000 #修改成功
使用@property 替代get_salary和set_salary函数
class Emp():
def __init__(self,name,salary):
self.__name = name
self.__salary = salary
@property
def salary(self):
return self.__salary
@salary.setter
def salary(self,salary):
if 1000 < salary < 50000:
self.__salary = salary
else:
print("请输入正确的值")
s1 = Emp("YHK",20000)
print(s1.salary)
s1.salary = -20000
print(s1.salary)
s1.salary = 30000
print(s1.salary)
调用方式发生了变化,但结果是一致的
输出结果依次为:
- 20000 #读取成功s1赋值
- 请输入正确的值 #设置数据不符合条件
- 20000 #数据未修改,返回之前保留的值
- 30000 #修改成功