@property 可以将一个方法的调用方式变成"属性调用"
class Employee:
@property
def salary(self):
print("salary run...")
return 10000
em1=Employee()
#em1.salary() #没加装饰器之前如此调用
em1.salary #加了装饰器property之后如此调用,就像:类名.属性名 的方式
#em1.salary=200 #@property修饰的属性,如果没有加 setter 方法,则为只读属性AttributeError: can't set attribute
getter和setter方法
#访问私有属性的getter和setter方法
class Employee:
def __init__(self,name,salary):
self.__name=name
self.__salary=salary
def get_salary(self): #定义一个getter方法访问私有的属性,这样在类外部想要获得这个私有属性,就不用_类名__私有属性名这种方式了,直接调用此方法即可
return self.__salary
def set_salary(self,salary):
if 1000<salary<30000:
self.__salary=salary #在类内部定义一个setter方法,这样在类内部就可以重新设置私有属性的值了,只要类外部调用此方法传入新值即可
else:
print("salary录入错误,salary在1000和30000之间")
emp=Employee("Vince",5000)
print(emp.get_salary())
emp.set_salary(2000)
print(emp.get_salary())
property装饰器来为私有属性设置
class Employee:
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<30000:
self.__salary=salary
else:
print("salary录入错误,salary在1000和30000之间")
emp=Employee("Vince",3500)
print(emp.salary) #emp.salary 这个调用的就是 @property def salary(self): 这个方法
emp.salary=2000 #emp.salary=2000 这个调用的就是 @salary.setter def salary(self,salary): 这个方法
print(emp.salary)
网友评论