面向对象进阶-property装饰器的用法 (PY高级编程系列)

面向对象进阶-property装饰器的用法

对属性的值进行限制

之前可以使用 set和get方法

class Person:
    # age 属性的值限制 0~88 | 以前可以使用 set 和 get方法
    def getAge(self):
        return self._age  # 下划线表示私有属性
    
    # 如果用户不使用 set 那就不能进行阻止 当然写入的也不是 self._age
    def setAge(self, value):
        if 0 <= value <= 88:
            self._age = int(value)
        else:
            # raise Exception('age的值在 (0~99) 之间的整数') | 可以抛出异常
            print('age的值在 (0~99) 之间的整数')
            self._age = 0  # 也可以设置默认值 (但设置默认值感觉不太好)
    pass


if __name__ == '__main__':
    p = Person()
    p.age = 18
    
    print(p.age)

    p.age = 100  # 这就不那么好
    
    print('-' * 80)
    p.setAge(18)
    print(p.getAge())  # 18
    p.setAge(100)
    print(p.getAge())  # 0 并输出提示信息

现在可以使用 装饰器 @property 与 @age.setter

class Person:  
    # 直接定义一个与属性名相同的方法
    @property  # 使用修饰符进行修饰 这是用于获取
    def age(self):
        return self._age
    
    # 也是直接定义一个与属性名相同的方法
    @age.setter
    def age(self, value):
        if 0 <= value <= 88:
            self._age = int(value)
        else:
            raise Exception('age的值在 (0~99) 之间的整数')
        
    pass

if __name__ == '__main__':
    p = Person()

    p.age = 18
    print(p.age)
    p.age = 100
    print(p.age)

只读处理 (装饰器 @property)

class Person:
    def __init__(self, name='张三'):
        self._name = name
    
    # 如果只暴露下面这一个方法 表示只允许读 不能改 (可以在实例化对象时传入初始值, 也可以设置内置)
    @property
    def name(self):
        self._name = '李四'
        return self._name

if __name__ == '__main__':
    p = Person()
    
    p.name = '张三'  # 无法设置属性 'name'
    print(p.name)

    # p.name = '张三'
    print(p.name)


有点短…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CY3761

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值