首页 > 编程语言 >python 装饰器@property 用法及案例增删改查

python 装饰器@property 用法及案例增删改查

时间:2024-12-20 15:09:57浏览次数:5  
标签:name 删除 python age 改查 person property self 属性

在Python中,@property装饰器允许你将类的方法当作属性来访问,从而实现属性的封装和验证。对于增删改查(CRUD)操作,你可以结合@property@<属性名>.setter@<属性名>.deleter装饰器来定义相应的方法。

下面是一个完整的例子,展示了如何使用这些装饰器来实现一个简单的CRUD接口:

class Person:
    def __init__(self, name, age):
        self._name = name  # 私有属性,用于存储姓名
        self._age = age    # 私有属性,用于存储年龄

    # 定义获取姓名的方法,使用@property装饰器
    @property
    def name(self):
        return self._name

    # 定义设置姓名的方法,使用@<属性名>.setter装饰器
    @name.setter
    def name(self, value):
        if not isinstance(value, str):
            raise ValueError("Name must be a string")
        self._name = value

    # 定义获取年龄的方法,使用@property装饰器
    @property
    def age(self):
        return self._age

    # 定义设置年龄的方法,使用@<属性名>.setter装饰器
    @age.setter
    def age(self, value):
        if not isinstance(value, int) or value < 0:
            raise ValueError("Age must be a non-negative integer")
        self._age = value

    # 定义删除年龄属性的方法(注意:通常不建议删除属性,这里仅作为示例)
    # 使用@<属性名>.deleter装饰器
    @age.deleter
    def age(self):
        del self._age
        # 可以选择设置一个默认值或者抛出异常,这里我们仅仅删除了属性
        # 但在实际使用中,可能需要更复杂的逻辑来处理属性删除

# 使用示例
person = Person("Alice", 30)

# 查(Read)
print(person.name)  # 输出: Alice
print(person.age)   # 输出: 30

# 增/改(Create/Update),这里使用相同的setter方法
person.name = "Bob"
person.age = 25
print(person.name)  # 输出: Bob
print(person.age)   # 输出: 25

# 尝试设置非法的年龄值将引发异常
# person.age = -5  # ValueError: Age must be a non-negative integer

# 删(Delete),注意:通常不建议这样做,因为可能会破坏对象的状态
# 在这个例子中,删除age属性后,再尝试访问它将引发AttributeError
del person.age
# print(person.age)  # AttributeError: 'Person' object has no attribute '_age'

# 需要注意的是,删除属性后,对象可能处于不一致的状态,
# 因此在实际应用中应该谨慎使用@<属性名>.deleter装饰器。

然而,需要强调的是,在实际应用中,删除属性通常不是一个好的做法,因为它可能会破坏对象的状态和封装性。在这个例子中,我们仅仅是为了展示@<属性名>.deleter装饰器的用法而包含了删除属性的方法。在大多数情况下,你应该避免删除对象的属性。

另外,请注意,在删除_age属性后,再尝试访问age属性将会引发AttributeError,因为age属性的getter方法试图访问一个已经不存在的私有属性_age。在实际应用中,如果你确实需要删除某个属性,你应该考虑在删除后设置一个合理的默认值或者抛出异常来通知调用者属性已被删除。

标签:name,删除,python,age,改查,person,property,self,属性
From: https://www.cnblogs.com/wyj497022944/p/18619316

相关文章

  • 基于yolov8的小麦麦穗检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源
       更多目标检测、图像分类识别、目标追踪等项目可看我主页其他文章功能演示:基于yolov8的小麦麦穗检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】_哔哩哔哩_bilibili(一)简介基于yolov8的小麦麦穗检测系统在pytorch框架下实现的,这是一个完整的项目,包括......
  • python 计时装饰器@timer 用法及案例
    在Python中,装饰器(decorator)是一种高级功能,它允许你在不修改原有函数或方法定义的情况下,为其添加额外的功能。计时装饰器(@timer)是一个常见的例子,用于测量函数或方法的执行时间。下面是一个简单的计时装饰器的实现及其用法案例:计时装饰器实现importtimefromfunctoolsimportw......
  • python 日志装饰器@logexecution 用法及案例
    在Python中,日志装饰器(@logexecution)是一种用于在函数或方法执行前后自动记录日志的装饰器。这种装饰器对于调试、监控和审计代码执行非常有用。下面是一个简单的日志装饰器的实现及其用法案例:日志装饰器实现importloggingimportfunctools#配置日志记录器(可选,但通常建议这......
  • python 重试装饰器@retryonexception 用法及案例
    在Python中,重试装饰器(@retryonexception)是一种用于在函数或方法执行过程中遇到异常时自动重试的装饰器。这种装饰器对于处理可能由于临时问题(如网络延迟、资源争用等)而失败的操作非常有用。下面是一个简单的重试装饰器的实现及其用法案例:重试装饰器实现importtimeimportfunct......
  • python类中 __开头的函数【魔法方法】
    在Python中,魔法方法(MagicMethods)或双下划线方法(DunderMethods)是一类特殊的方法,它们以双下划线(__)开头和结尾。这些方法为对象提供了丰富的功能,允许你定义对象的内置操作行为,如初始化、比较、表示、数学运算等。以下是一些常见的魔法方法及其用途,并附有相应的示例代码。1.初始......
  • python学习——与时间日期相关的方法
    文章目录类方法例子不用考虑闰年了!Python中处理日期和时间的功能主要依赖于datetime模块。类datetime.date:表示日期(年、月、日)的类。datetime.time:表示时间(小时、分钟、秒、微秒)的类。datetime.datetime:表示日期和时间的组合。datetime.timedelta:表......
  • python毕设 基于web的养宠系统的实现程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于宠物管理系统的研究,现有研究主要以宠物领养、销售等传统功能为主。专门针对基于web的综合性养宠系统,涵盖宠物帮遛、遛宠信息等功......
  • 修改python jsonpickle源码, 实现不序列化对象私有成员(3)
    发现之前修改源码后,虽然过滤掉对象的私有成员,但是反序列化的时候,发现生成的对象只有只有公有成员,不包括私有成员.这不是我想要的,因为没有私有成员,对象就不完整了,并且有时候还需要一些私有成员的默认值.所以,还需要再优化一下.修改unpickler.py文件的def_restor......
  • Python旅游信息管理系统v7c4w(Pycharm Flask Django Vue mysql)
    文章目录项目介绍和开发技术介绍具体实现截图开发技术开发与测试:设计思路系统测试可行性分析核心代码部分展示文章目录/写作提纲参考源码/演示视频获取方式项目介绍和开发技术介绍旅游信息管理系统的现状来进行开发的,具体根据现实的需求来实现旅游信息管理系统网络......
  • Python古玩玉器藏品交易系统(Pycharm Flask Django Vue mysql)
    文章目录项目介绍和开发技术介绍具体实现截图开发技术开发与测试:设计思路系统测试可行性分析核心代码部分展示文章目录/写作提纲参考源码/演示视频获取方式项目介绍和开发技术介绍实现了一个古玩玉器交易系统。古玩玉器交易系统的主要用户分为用户、管理员。管理员......