面向对象进阶-property装饰器的用法 (PY高级编程系列)
2021/11/24 12:40:00
本文主要是介绍面向对象进阶-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)
有点短…
这篇关于面向对象进阶-property装饰器的用法 (PY高级编程系列)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?