@property 的作用详解@property 是 Python 中一个非常实用的内置装饰器(decorator),用于将类中的方法转换为“只读”或“可控”的属性。它使得我们可以像访问普通属性一样调用方法,同时保留对数据的验证、计算或保护能力。
在面向对象编程中,我们通常希望对类的属性进行封装,避免外部直接修改内部状态。但 Python 没有真正的私有变量,因此通过 @property 可以优雅地实现“属性访问控制”。
class MyClass:
def __init__(self, value):
self._value = value
@property
def value(self):
return self._value
@value.setter
def value(self, new_value):
if new_value < 0:
raise ValueError("值不能为负数")
self._value = new_value
假设我们要定义一个“圆”类,其半径不能为负数:
class Circle:
def __init__(self, radius):
self.radius = radius # 会触发 setter
@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.1416 * self._radius ** 2
# 使用
c = Circle(5)
print(c.radius) # 5
print(c.area) # 78.54
c.radius = 10 # 合法
# c.radius = -1 # 报错!
@property 时,属性默认为只读@属性名.setter@property