Python 内建函数列表 > Python 的内置函数 property
Python 的内置函数 property() 是一个非常重要的工具,用于管理类属性的访问。它提供了一种优雅的方式来定义属性访问器(getter)、设置器(setter)和删除器(deleter)方法,同时保持简洁的接口。
基本用法
1class Person: 2 def __init__(self, name): 3 self._name = name 4 5 @property 6 def name(self): 7 """获取姓名""" 8 return self._name 9 10 @name.setter 11 def name(self, value): 12 if not isinstance(value, str): 13 raise ValueError("姓名必须是字符串") 14 self._name = value 15 16 @name.deleter 17 def name(self): 18 print("删除姓名") 19 del self._name 20
典型应用场景
- 数据验证:在设置属性值时进行有效性检查
- 计算属性:根据其他属性动态计算值
- 访问控制:控制对敏感属性的访问权限
- 延迟加载:只在需要时才计算或获取属性值
示例代码
1class Person: 2 def __init__(self, name): 3 self._name = name 4 5 @property 6 def name(self): 7 """获取姓名""" 8 return self._name 9 10 @name.setter 11 def name(self, value): 12 if not isinstance(value, str): 13 raise ValueError("姓名必须是字符串") 14 self._name = value 15 16 @name.deleter 17 def name(self): 18 print("删除姓名") 19 del self._name 20
使用装饰器的优势
使用 @property 装饰器比直接使用 property() 函数更为简洁直观。实际上,装饰器语法:
1@property 2def name(self): 3 ... 4
等同于:
1name = property(name) 2
注意事项
- 属性方法应该保持简单,避免复杂的计算或IO操作
- 不要过度使用 property,对于简单的属性访问直接使用公共属性即可
- property 不能用于实例方法,只能用于实例属性
进阶用法
property 还可以用于实现:
- 只读属性(只定义 getter)
- 只写属性(只定义 setter)
- 缓存属性(在 getter 中进行缓存)
- 观察者模式(在 setter 中通知观察者)
通过合理使用 property,可以大大提高代码的可维护性和安全性。
《Python 的内置函数 property》 是转载文章,点击查看原文。