property和setter装饰器的使用

通过装饰器,优雅的查看和修改类的私有变量

简介

property : 不可作用于非私有变量,可以为私有变量提供get方法,通过 类.函数名 的方式获取私有变量, 建议函数名和私有变量名称一致
函数名.setter : 函数名需要和 property 设计的函数名一致,不一致则产生异常,同时,setter方法只能针对私有变量进行修改

python代码,通过python3.8验证

class Student:
    def __init__(self):
        self.name = "童话"
        self.__age = 18

    # @property
    # def name(self):
    #     return self.name
    #
    # @name.setter
    # def name(self, user_name):
    #     self.name = user_name

    @property  # 提供getter方法
    def age(self):
        return self.__age

    # @age.setter
    # def age(self, n):
    #     if n > 18:
    #         self.__age = n
    #     else:
    #         self.__age = 0
    #         print("年龄输入异常,将重置为0")
    @age.setter  # 提供setter方法
    def age(self, n):
        print("私有变量不允许更改")

    def getter_age(self):
        return self.__age

    def setter_age(self, n):
        if n > 18:
            self.__age = n
        else:
            self.__age = 0
            print("年龄输入异常,将重置为0")

def main():
    student = Student()
    print(student.name)  # 非私有变量使用property和setter方法将产生异常
    # 此处的setter方法是注释的方法,需要更换注释
    # print(student.age)  # 私有变量可以使用property和setter
    # student.age = 15  # 此时将直接调用setter方法,将判断年龄是否大于18岁,如果小于18,将重置年龄并打印异常信息
    # print(student.age)
    # print(student._Student__age)

    # 此处的setter方法是没有注释的方法,可以实现私有变量为只读变量的设置
    print(student.age)
    student.age = 180  # 此处将不会修改age的值,并打印异常信息
    print(student.age)
    student._Student__age = 180  # 使用不合法的方式仍然可以修改
    print(student.age)

    # setter和property的功能是优化类的代码块,可以通过直接 类.属性 进行查看和修改
    # 使用函数也可以实现下列效果
    print(student.getter_age())
    student.setter_age(190)
    print(student.getter_age())
    print(student.age)
if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值