Python 中 @property 的作用详解

@property 是 Python 中一个非常实用的内置装饰器(decorator),用于将类中的方法转换为“只读”或“可控”的属性。它使得我们可以像访问普通属性一样调用方法,同时保留对数据的验证、计算或保护能力。

为什么需要 @property?

在面向对象编程中,我们通常希望对类的属性进行封装,避免外部直接修改内部状态。但 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 的优势

注意事项

美版iPhone都没有卡槽吗?真相揭秘|iPhone卡槽与双卡功能详解 Python 中 sep 参数的用法详解-字符串分隔符指南 Pioneer怎么连接手机?详细图文教程-快速配对指南 三亚免税店iPhone 17最新优惠-免税购机指南 SHEIN招聘-加入全球领先的时尚科技公司 Switch打不开eShop?常见原因与解决方法汇总 iPhone 17 京东什么时候有货?最新发售时间与到货信息-实时追踪 Champion是什么牌子?品牌历史、产品特点与选购指南 ShopEx-专业开源电商系统解决方案 台灣 iPhone 17 Pro 可以插卡嗎?完整解析與購買指南 Python query函数详解-用法、示例与最佳实践 pioneers怎么读英语-英语发音指南与词义解析 Pioneer加速器下载-高速稳定的游戏与网络加速工具 Python bytearray 详解-可变字节序列操作指南 Python怎么更新pip?详细教程与常见问题解答 Tournament 与 Champion 的区别:电竞与体育术语解析 Python in 函数用法详解-快速掌握成员检测操作 Python Spyder 专题页-强大的科学计算IDE 柯尔特 Python 左轮手枪-经典美式转轮传奇 你非常有 Potential-发掘你的无限可能 iPhone序列号JH开头代表什么?全面解析与查询指南 Nintendo账号注册与管理指南-完整教程 国家开放大学-开放教育引领终身学习新时代 Win the Champion-追逐荣耀,成就冠军之路 inhuman 与 inhumane:词义辨析与用法指南 Python IDE有哪些?主流Python集成开发环境推荐 Python sep 参数详解-print() 函数中的分隔符用法指南 德国Prorino品牌介绍|高品质德国制造 内啡肽至上|Endorphins Over Everything Do Something to Do Something – 激发行动,成就改变 Pioneer翻译中文-先锋精神与语言桥梁 iPhone 17 京东首发|全新升级,震撼来袭 Switch港服eShop指南-游戏购买、充值与使用技巧 犁耕:传统与现代的农耕艺术|Ploughing专题 普鲁卡因(Procaine)是什么药?作用、用途与注意事项详解 Python print() 函数详解-入门到精通 iPhone过海关要拆封吗?2026最新政策与实用指南 Python 中 heapq 怎么读?详解与使用指南 Python index() 函数详解-查找列表、字符串等序列中元素的位置 Pioneer先锋功放-高保真音响系统的经典之选 iPhone Air能双卡吗?全面解析苹果手机双卡功能 Shopee汉语意思是什么?全面解析东南亚电商平台Shopee SHEIN最新消息-全球时尚快讯、新品发布与品牌动态 Chain Dollar Store-一元好物,品质生活 Python while循环详解-从入门到实践 任天堂eShop-探索Nintendo Switch数字游戏世界 Pixelmon 中文专题页-宝可梦与像素世界的完美融合 Python 编码(Encoding)用法详解-字符编码问题一站式指南 iPhone序列号以D开头的含义与查询指南 Prorino胶囊-支持肠道健康与免疫平衡的益生菌配方 MicroPython 与 Python 的区别详解|入门指南 RustPython:用 Rust 编写的 Python 解释器 港版iPhone与国行iPhone有什么区别?全面对比指南 怎么预约港版iPhone?最新预约流程与注意事项-港版iPhone预约指南 匹诺曹在法国:童话与文化的奇妙交融 Python list转str:完整指南与实用技巧 OpenCV 安装指南-快速上手计算机视觉开发 iPhone第一款手机叫什么?揭秘初代iPhone的诞生历史 iPhone 17 台灣價格預測與最新消息|2026 最新資訊 Pinocchio-Guarda Gratis in Italiano|Film Classico Online Python中pip怎么用-全面指南与实用示例 Champion中文叫什么?全面解析“冠军”一词的含义与用法 iPhone 17 支持 AI 吗?最新功能与技术解析 Shine品牌7LONGWEN-点亮你的生活 Professional下载-安全高速的专业软件资源站 It Is Nice Doing Something – 发现生活中的美好小事 Python中shape[0]详解-NumPy数组维度入门指南 Shine选品助手-智能高效的商品选品工具 Python中的int()函数详解-类型转换入门指南 Python str 转 byte 详解|字符串与字节转换指南 怎么知道自己的 iPhone 是不是国行?全面指南|iPhone 国行识别方法 Endorphio的隐喻与寓意|探索内在喜悦的象征意义 Nintendo Switch App 最新版下载与使用指南-NS玩家必备工具 Off The Chain-探索自由、创意与突破的边界 Chainge7LONGWEN-连接未来金融,赋能数字资产自由流动 Shopee面单打印指南-快速设置与高效发货 iPhone 11 Pro 双卡怎么放?详细图文教程-苹果双卡设置指南 你喜欢熊猫吗?探索可爱国宝的奇妙世界 Switch进入eShop指南-快速访问任天堂在线商店 Python 中的 sep 参数详解-分隔符用法指南 港服 Nintendo eShop-香港任天堂78TP遊戲商店 Champion的读音-英语发音指南与词义解析 PythonTip78TP网站入口-学习Python编程,从实战开始 美版iPhone序列号开头查询指南-快速识别美版设备 台湾版iPhone与国行iPhone区别详解-购机指南 eshop怎么进?Nintendo eShop 入口指南与常见问题解答 Monchhichi 7LONGWEN-经典毛绒玩具,陪伴每一代人的童年回忆 Python List 用法详解-列表操作、方法与示例大全 MicroPython 入门指南-轻量级 Python 用于微控制器开发 如何更新 Python 的 pip 工具-最新命令与使用指南 SHEIN股东结构与股权占比分析-最新2026年数据 先锋精神|探索、创新与突破 Pioneer电视网络设置指南-快速连接Wi-Fi与有线网络 如何入驻SHEIN平台-卖家入驻指南与流程详解 Wise to Do Something:明智之举,成就更好的自己 iPhone XR 属于苹果第几代?全面解析 iPhone 第12代产品 Defending Champion 是什么意思?详解卫冕冠军的含义与用法 耕犁专题-探索传统与现代的耕作艺术 Python中while循环详解-入门到实践 始祖鸟 Endorphin 马甲-轻量防护,户外自由之选