Python面向对象:@property装饰器

@property 的基本概念

在 Python 面向对象编程中,@property 是实现属性封装的核心装饰器 ,它的核心作用是:将类的「方法」伪装成「属性」,既实现了对私有属性的安全访问 / 修改,又保留了简洁的属性调用语法,完美解决了传统 get_xxx()/set_xxx() 方法的繁琐问题。

【总结:把要操作私有属性的常用方法包装成属性本身,从而使用直接访问属性的语法】

使用 @property 封装属性

定义一个类,使用 @property 装饰器将方法转换为属性。这样可以在不改变类的外部接口的情况下,对属性的访问和修改进行控制。

1. 核心规则

  • @property:装饰get 方法 ,将方法变成只读属性
  • @属性名.setter:装饰set 方法 ,定义属性的修改规则(必须写在 @property 之后)
  • @属性名.deleter:装饰del 方法 ,定义属性的删除规则(可选)
  • @property 装饰的方法名 = 对外暴露的属性名

2. 示例

python 复制代码
class Person:
    def __init__(self, name):
        self._name = name  # 使用下划线表示受保护的属性

    @property              #装饰get 方法,将方法变成只读属性
    def name(self):
        return self._name

    @name.setter           #装饰set 方法,定义属性的修改规则
    def name(self, value):
        if not isinstance(value, str):
            raise ValueError("Name must be a string")
        self._name = value

    @name.deleter           #装饰del 方法,定义属性的删除规则
    def name(self):
        print("Deleting name...")
        del self._name

使用 @property 的好处

  • 封装性:隐藏内部实现细节,提供统一的接口。
  • 灵活性:可以在获取或设置属性时添加额外的逻辑。
  • 兼容性:可以在不改变外部代码的情况下修改内部实现。
  • 语法简洁 :调用时像普通属性一样(obj.xxx),无需写方法括号
相关推荐
陈随易10 分钟前
副业搞钱点子之收入查看器
前端·后端
Profile排查笔记13 分钟前
浏览器指纹逆向怎么分析:从网络请求追踪到 JavaScript 采集链
前端·人工智能·后端·自动化
小小龙学IT28 分钟前
Python Polars 高性能数据处理引擎深度解析
开发语言·python·rust·1024程序员节
csdn_aspnet35 分钟前
JavaScript 未排序数组中第 k 个最小/最大元素 (预期线性时间)
python
quantdash_cc35 分钟前
如何利用标的信息为研究股票池补充名称和交易所信息?
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
数字化转型分享点滴36 分钟前
机加工企业上大数据分析系统有哪些容易踩的坑?
python·1024程序员节
hudie76541 分钟前
LikeShop 二开最常改的 5 个文件(附改前改后对比)
前端·uni-app·php·个人开发
qetfw1 小时前
Bash 函数与流程控制:read、if、for、case 验证
linux·前端·javascript·bash
B2_Proxy1 小时前
Scrapy 代理 IP 调度进阶:基于 Redis 与中间件的高可用架构实战
python·scrapy·1024程序员节
在世修行1 小时前
智学文枢:AI 客户端封装
python·http·ai·1024程序员节·pyside