属性装饰器
本课属于 Coddy Python 学习旅程的“面向对象编程”单元。第 10 课,共 64 课。
@property 装饰器让你可以像访问属性一样访问方法,提供了一种简洁的方式来获取和设置值。这对于封装很有用,你可以添加验证逻辑或计算值,而无需更改类的公共接口。
下面是一个使用 @property 的类示例:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@property
def area(self):
return 3.14159 * self._radius ** 2注意,我们使用 self._radius 来存储实际值。如果在 getter 中使用 self.radius,它会再次调用 getter 方法,从而导致无限递归。
创建一个圆并访问其属性:
my_circle = Circle(5)像访问普通属性一样访问属性:
print(my_circle.radius)
print(my_circle.area)输出:
5
78.53975注意,访问属性时不使用括号 (),它们看起来像属性,但会运行方法代码。
添加一个设置器,以便通过验证来更改值:
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:
self._radius = value
else:
print("Radius must be positive!")现在,你可以像设置属性一样设置半径:
my_circle = Circle(5)
my_circle.radius = 10 # 使用 setter 方法
print(my_circle.radius) # 使用 getter 方法输出:
10要点:@property 可以让方法看起来像属性,而 @property_name.setter 可以让你控制值的赋值方式,从而实现数据验证和封装。
亲手试试
这节课没有代码挑战。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: Python 在线编译器