博客
关于我
第8.31节 Python中使用__delattr__清除属性数据
阅读量:93 次
发布时间:2019-02-26

本文共 1606 字,大约阅读时间需要 5 分钟。

一、 引言

在前面几节我们介绍了__ 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. 案例小结
    通过以上案例可以看到:
    1)直接用属性名无法执行__delattr__成功,必须用字符串;
    2)实例方法无法执行__delattr__;
    3)执行成功__delattr__后,字典中对应属性被删除,与直接“del 实例.属性”效果相同。

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

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

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

转载地址:http://iog.baihongyu.com/

你可能感兴趣的文章
Nitrux 3.8 发布!性能全面提升,带来非凡体验
查看>>
NiuShop开源商城系统 SQL注入漏洞复现
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP 模型中的偏差和公平性检测
查看>>
Vue3.0 性能提升主要是通过哪几方面体现的?
查看>>
NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
查看>>
NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
查看>>
NLP三大特征抽取器:CNN、RNN与Transformer全面解析
查看>>
NLP学习笔记:使用 Python 进行NLTK
查看>>
NLP度量指标BELU真的完美么?
查看>>
NLP的不同研究领域和最新发展的概述
查看>>
NLP的神经网络训练的新模式
查看>>
NLP采用Bert进行简单文本情感分类
查看>>
NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
查看>>
NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
查看>>
NLP:从头开始的文本矢量化方法
查看>>
NLP:使用 SciKit Learn 的文本矢量化方法
查看>>