首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

第8.31节 Python中使用__delattr__清除属性数据

  • 23-09-22 19:21
  • 2237
  • 6248
blog.csdn.net

一、 引言
在前面几节我们介绍了__ getattribute__方法和__setattr__方法,分别实现了实例属性的查询和修改(含定义即新增),作为Python中数据操作必不可少的三剑客get、set、delete,get、set都有操作捕获方法,delete一样有对应操作的捕获方法,这个方法就是内置方法__delattr__。

二、 语法释义

  1. 语法:实例. delattr(属性名)
  2. 直接调用该函数可以删除对应实例的对应实例变量,不能删除类体中定义的方法和类变量,否则会报AttributeError;
  3. 该函数无返回值,如果出现异常,直接呈现对应异常.

三、 案例

  1. 案例说明
    案例中定义了类Car,类中有构造方法和drive方法,有2个实例变量power、totaldistance,用该类定义实例对象car,对相关属性执行__delattr__方法,看执行结果。
  2. 案例代码及输出(交互模式执行)
>>> class Car():
    refcount = 0
    def __init__(self, power):
        self.power = power
        self.totaldistance=0
        
    def drive(self,distance):
        print(f"In method drive:distance={distance}")
        self.totaldistance+=distance
       
>>> car = Car('汽油发动机')
>>> car.__dict__  #查看自定义实例变量
{'power': '汽油发动机', 'totaldistance': 0}
>>> car.__delattr__(power)#应该报错,属性名应该是字符串类型
Traceback (most recent call last):
  File "", line 1, in 
    car.__delattr__(power)#应该报错,属性名应该是字符串类型
AttributeError: 汽油发动机
>>> car.__delattr__('power')
>>> car.__delattr__('drive') #应该报错,方法不能删除
Traceback (most recent call last):
  File "", line 1, in 
    car.__delattr__('drive') #应该报错,方法不能删除
AttributeError: drive
>>> car.__dict__  #查看实例变量,power已经删除了
{'totaldistance': 0}
>>> 
>>>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  1. 案例截屏
    在这里插入图片描述
  2. 案例小结
    通过以上案例可以看到:
    1)直接用属性名无法执行__delattr__成功,必须用字符串;
    2)实例方法无法执行__delattr__;
    3)执行成功__delattr__后,字典中对应属性被删除,与直接“del 实例.属性”效果相同。

由于Python中采用自动引用计数(ARC:Automatic Reference Counting)方式来判断对象是否需要被回收,因此对应实例属性是否能删除需要Python内部的机制来保障,因此老猿不建议大家直接调用__delattr__方法来删除实例的属性,不过在特定情况下可以通过重写该方法进行一些属性删除的特殊处理,确保相关实例属性释放时程序进行了正确处理。

本节简单介绍了__delattr__方法调用的语法,不过老猿不建议大家直接调用该方法,而是在特定情况下重写该方法。

老猿Python,跟老猿学Python!
博客地址:http://iyenn.com/index/link?url=https://blog.csdn.net/LaoYuanPython

请大家多多支持,点赞、评论和加关注!谢谢!

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树首页概览333596 人正在系统学习中
老猿Python
微信公众号
专注Python相关语言、图像音视频处理、AI
注:本文转载自blog.csdn.net的LaoYuanPython的文章"https://blog.csdn.net/LaoYuanPython/article/details/96729822"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top