Python中@property装饰器的用法:计算属性与只读保护

阿麦
阿麦
发布时间:2026-10-15 | 4人浏览过
原创

本文详解Python中@property装饰器的使用方法。通过该装饰器可将方法转换为属性,实现无需括号即可访问的计算属性,使代码更简洁。同时,利用@property结合私有变量可实现只读属性,防止外部直接修改,并可添加拦截器进行约束检查,增强数据安全性。

一、前言

本文讨论的属性不同于常规的类属性或实例属性。常规属性直接返回存储的值,而本文介绍的属性在访问时会动态计算其值。此外,该机制还能为属性提供安全保护机制。

二、创建用于计算的属性

在Python中,利用@property装饰器可以将一个方法转换为属性,从而创建用于计算的属性。转换后,可以直接通过属性名访问,无需添加小括号“()”,使代码更加简洁。

通过@property创建计算属性的语法格式如下:

@property
def methodname(self):
	block

参数说明:

  • methodname:指定方法名,通常以小写字母开头,该名称最终成为创建的属性名。
  • self:必要参数,代表类的实例。
  • block:方法体,实现具体功能。通常以return语句结束,返回计算结果。

例如,定义一个矩形类,在__init__()方法中定义两个实例属性,再定义一个计算矩形面积的方法,并应用@property将其转换为属性,最后创建类的实例并访问转换后的属性。

代码如下:

class Rect:
    def __init__(self, width, height):
        self.width = width  # 矩形的宽
        self.height = height  # 矩形的高
    @property  # 将方法转换为属性
    def area(self):
        return self.width * self.height  # 返回矩形的面积
rect = Rect(800, 600)  # 创建实例
print("面积为:", rect.area)  # 输出属性值

运行上面代码,将显示以下运行结果:

三、为属性添加安全保护机制

默认情况下,创建的类属性或实例可以在类体外修改。若限制其不能在类体外修改,可将其设置为私有,但设置为私有后在类体外也无法获取其值。若要创建一个可以读取但不能修改的属性,可以使用@property实现只读属性。

例如,创建一个电视节目类TVshow,再创建一个show属性,用于显示当前播放的电视节目,代码如下:

class TVshow:  # 定义电视节目类
    def __init__(self, show):
        self.__show = show
    @property  # 将方法转换为属性
    def show(self):  # 定义show()方法
        return self.__show  # 返回私有属性值
tvshow = TVshow("正在播放《战狼》")  # 创建类的实例
print("默认:", tvshow.show)  # 获取属性值

运行上面代码,将显示以下运行结果:

通过上述方法创建的show属性是只读的。尝试修改属性值并重新获取。在上面的代码下方添加以下代码:

tvshow.show = "正在播放《红海行动》"
print("修改后:", tvshow.show)

运行后,将显示如下图所示的运行结果,其中红字的异常信息即为修改属性show时抛出的异常。

通过@property不仅可以将属性设置为只读,还可以为属性设置拦截器,即允许对属性进行修改,但修改时需要遵守一定约束。

到此这篇关于python中@Property属性使用方法的文章就介绍到这了,更多相关python @Property 内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表