@property 装饰器在 Python 面向对象编程中,@property 是一个非常实用的内置装饰器,它允许你将类的方法转换为“只读”或“可控读写”的属性,从而在不破坏接口的前提下增强封装性和数据验证能力。
传统上,如果我们想控制对某个属性的访问(比如校验输入值、计算派生值等),通常会编写 get_x() 和 set_x(value) 方法。但这样调用起来不够直观,也不符合 Python “简洁优雅”的哲学。
而 @property 让你可以像访问普通属性一样调用方法,同时保留逻辑控制能力。
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
"""获取半径"""
return self._radius
@radius.setter
def radius(self, value):
"""设置半径,并进行合法性校验"""
if value < 0:
raise ValueError("半径不能为负数")
self._radius = value
@property
def area(self):
"""只读属性:计算面积"""
return 3.14159 * self._radius ** 2
c = Circle(5)
print(c.radius) # 输出: 5
print(c.area) # 输出: 78.53975
c.radius = 10 # 触发 setter
print(c.area) # 输出: 314.159
# c.radius = -1 # 抛出 ValueError
.)访问方式,提升可读性@property,不定义 setter)⚠️ 不要滥用 @property!如果属性访问涉及复杂计算或 I/O 操作,应明确使用方法而非属性,避免误导使用者。
⚠️ 属性名不要与内部变量名冲突。通常使用下划线前缀(如 _radius)表示“受保护”成员。
@property 是 Python 面向对象编程中的优雅工具,它让属性管理既安全又直观。合理使用,能显著提升代码质量与可维护性。