天天看点

拜师——python基础入门—第8大节课— 类: @property装饰器get 和 set方法——day35第107课时: 类: @property装饰器get 和 set方法

第107课时: 类: @property装饰器get 和 set方法

@property装饰器:

作用:

可以将一个方法的调用方式变成 “属性调用”。 用于给属性增加对应的 getter 和 setter 的方法.

(数据读取、和数据设置)

class man:

    @property
    def say(self):
        print('nb')
        return 1000

e1 = man()
           

nb

1000

可以看到,say是一个方法。但是调用时却是按照实例属性的格式调用的。 对象名.方法名

但是注意,这个不是该实例对象的实例属性,不能进行赋值操作。

class man:

    @property
    def say(self):
        print('nb')
        return 1000

e1 = man()
e1.say=110
           

报错!!!

传统方式(类方法) 得到、设置 实例属性:

class man:

    def __init__(self,name,salary):
        self.__name= name
        self.__salary= salary

    def get_salary(self):
        return self.__salary

    def set_salary(self,newsalary):
        if 1000<newsalary<50000:
            self.__salary= newsalary
        else:
            print('输入的钱错误。应该在1000-50000')


e1 = man('wlz',2000)
print(e1.get_salary())

e1.set_salary(5000)
print(e1.get_salary())
           

2000

5000

由于实例对象用的是私有属性的格式来写,所以无法直接调用,但是可以用装饰器的方法来实现。

class man:

    def __init__(self,name,salary):
        self.__name= name
        self.__salary= salary
   
    @property
    def salary(self):
        return self.__salary

    @salary.setter
    def salary(self,newsalary):
        if 1000<newsalary<50000:
            self.__salary= newsalary
        else:
            print('输入的钱错误。应该在1000-50000')

e1 = man('wlz',2000)
print(e1.salary)

e1.salary=5000
print(e1.salary)
           

2000

5000

可以到看调用变得更加简便直观了。

print(e1.salary) 读取数据

e1.salary=5000 改写数据。