property() 属性描述符
最后更新:2026-09-22
property() 属性描述符
property(fget, fset, fdel, doc) 把方法封装为可像属性一样访问的对象;也可用 @property 装饰器。
| 分类 | 内置函数 |
|---|---|
| 类型 | 内置函数 |
| Python 版本 | all |
📝 语法
property(fget[, fset[, fdel[, doc]]])
⚙️ 参数
| fget 可选 | 读取属性值的函数(getter)。(默认值:None) |
|---|---|
| fset 可选 | 设置属性值的函数(setter)。(默认值:None) |
| fdel 可选 | 删除属性的函数(deleter)。(默认值:None) |
| doc 可选 | 属性的文档字符串。(默认值:None) |
返回值:返回 property 对象,一个可像普通属性一样访问的数据描述符。
▶ 示例
编辑下方代码,点击运行,在输出面板查看结果:
运行结果:
10
🏷️ 相关内置函数
💡 相关案例
更多实战案例即将上线,敬请期待。
❓ 常见问题
Qproperty 有什么用?
A把方法包装成属性访问:obj.x 触发 getter 逻辑,调用不用加括号,还能在赋值时做校验(setter),实现“计算属性”和封装。
Q@property 与 @x.setter 怎么配合?
A@property 定义读取逻辑,@x.setter 定义赋值校验,如 c.x = 10 会走 setter;只定义 @property 不定义 setter 时,赋值抛 AttributeError: can't set attribute。
Qproperty 和普通方法有什么区别?
A访问方式不同(obj.x 而非 obj.x()),且 property 能拦截读取/赋值/删除三个操作,适合内部字段的封装与校验。
Q计算属性会缓存结果吗?
A不会,每次访问 obj.x 都重新执行 getter;需要缓存得自己实现(如 functools.cached_property)。