在面向对象编程中,封装 是一个核心原则,它要求我们隐藏对象的内部状态,仅通过受控的接口来访问和修改数据。传统上,我们通过 getter 和 setter 方法来实现这一点。然而,在 Python 中,使用普通的方法(如 get_name() 和 set_name())会让代码变得冗长且不够直观——使用者需要记住方法名,而无法像访问普通属性那样自然。
@property 装饰器 是 Python 提供的一种优雅的解决方案。它允许你将方法“伪装”成属性,从而在保持简单访问语法(obj.attr)的同时,执行任意的逻辑(如校验、计算、日志等)。这一机制完美地平衡了“封装”与“易用性”,是 Python 语言最具特色的设计之一。
本文将系统地介绍 @property 的用法、原理、高级技巧以及最佳实践。我们将从最基础的 getter 开始,逐步深入到 setter、deleter,再到计算属性、缓存属性、只读属性等进阶话题。通过大量实例,你将学会如何利用 @property 写出更加 Pythonic、可维护的代码。
一、为什么需要 @property?
假设我们有一个 Person 类,包含 name 和 age 属性。最初,我们直接暴露这些属性:
class Person:
def __init__(self, name, age):
self.name = name




