在 Python 中,可以使用 @property 装饰器把一个方法变成 只读属性,从而让对象的接口更加简洁和优雅。
同时,还可以配合 @<属性名>.setter 和 @<属性名>.deleter 来定义可写属性和可删除属性。
问题描述:
我们需要定义一个 Circle 类:
- 通过半径 radius 初始化;
- 提供只读属性 area(圆的面积);
- 提供可读写属性 radius;
- 提供可读属性 diameter(直径)。
代码示例:
import math
class Circle:
def __init__(self, radius):
self._radius = 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 diameter(self):
return self._radius * 2
# 面积 (只读属性)
@property
def area(self):
return math.pi * (self._radius ** 2)
# 使用示例
c = Circle(5)
print("半径:", c.radius)
print("直径:", c.diameter)
print("面积:", c.area)
c.radius = 10
print("更新后的半径:", c.radius)
print("新的面积:", c.area)
# 尝试设置非法半径
try:
c.radius = -3
except ValueError as e:
print("错误:", e)
运行结果:
半径: 5
直径: 10
面积: 78.53981633974483
更新后的半径: 10
新的面积: 314.1592653589793
错误: 半径必须为正数
总结:
- @property 让方法看起来像属性一样被访问。
- 可以用 @xxx.setter 定义属性的写入规则。
- 可以用 @xxx.deleter 定义删除属性时的行为。
- 常用于 属性封装、计算属性 的场景。
© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END



















暂无评论内容