美文网首页工作生活
property装饰器&get和set方法

property装饰器&get和set方法

作者: Chaweys | 来源:发表于2019-06-29 16:58 被阅读0次

@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)

相关文章

网友评论

    本文标题:property装饰器&get和set方法

    本文链接:https://www.haomeiwen.com/subject/nobpcctx.html