@property 装饰器

在Python中,@property 装饰器是一种特殊装饰器,用于创建只读属性的方法。当你想要一个方法表现得像属性一样,可以使用 @property 装饰器来实现。

使用 @property 装饰器,你可以将一个方法定义为属性访问器,这样就可以通过点符号(.)来调用它,就像访问一个普通的属性一样。

以下是一个使用 @property 装饰器的示例:

复制代码
class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def name(self):
        return self._name

    @property
    def age(self):
        return self._age

    # 如果你想允许设置属性的值,可以定义一个对应的 setter 方法
   @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("年龄不能为负数")
        self._age = value
# 创建 Person 类的实例
person = Person("Alice", 30)
# 使用 @property 装饰的方法  因为定义的name是私有属性,如果没有property装饰的方法,不能直接用person.name的方式访问name属性
print(person.name)  # 输出: Alice
print(person.age)  # 输出: 30

# 使用 setter 设置属性值因为定义的age是私有属性,如果没有property装饰的方法,不能直接用person.age=31的方式为age属性赋值
person.age = 31
print(person.age)  # 输出: 31

在这个例子中,name 和 age 是通过 @property 装饰的方法,它们允许你像访问属性一样访问这些方法。对于 age,我们还定义了一个对应的 setter 方法,它允许你设置 age 属性的值,并在设置之前进行一些验证(例如,确保年龄不会是负数)。

使用 @property 装饰器的好处是,它提供了一种更 Pythonic 的方式,让你可以控制属性的访问和修改,同时保持代码的清晰和简洁。这种方式也使得代码更易于维护和理解,因为你可以通过直观的方式访问和修改属性,而不是使用单独的 getter 和 setter 方法。

相关推荐
YOLO数据集集合12 分钟前
EvoAgent:面向PR研发治理的自进化Multi-Agent Harness系统
java·开发语言·目标检测·agent·自进化
for_ever_love__41 分钟前
机器学习入门——手写线性回归与梯度下降
人工智能·python·学习·机器学习·线性回归
打工仔折腾 AI1 小时前
从 Demo 到生产级 Agent:8 个关键设计机制与 Python 实现拆解
java·jvm·人工智能·后端·python·langchain·ai agent 实战
I Am a robert girl1 小时前
当传感器学会“说谎“:拆解可靠性门控的稀疏惯性动捕融合
python·姿态估计·传感器融合·惯性动捕·imu传感器·可靠性门控·可穿戴计算
李航19831 小时前
AI定制柜建模,需要详细的建模规范和标准流程
人工智能·python·计算机视觉·ai·ai编程
沙漠之主2 小时前
Python 教学设计资料:从入门到实战的完整课程方案
爬虫·python
知识分享小能手3 小时前
C++ 学习教程,从入门到精通,C++ 友元、异常和其他特性 — 详细知识点(15)
开发语言·c++·学习
ebiobiz3 小时前
极海 APM32 使用 Nimmake 编译指南
c++·python·单片机·嵌入式硬件·mcu
朝朝辞暮i3 小时前
C++ 第 26 课:对象、指针与 ->
java·开发语言·c++
慢云智慧空间3 小时前
从智能终端到空间AI,慢云科技如何重新定义智慧建筑的核心能力?
人工智能·python·科技