python隐藏类的属性 重写__dir___第8.32节 Python中重写__delattr__方法捕获属性删除

一、引言

上节介绍了__delattr__方法在Python清除实例属性时被捕获执行,本节结合例子介绍重写__delattr__方法,并说明__delattr__方法执行的触发逻辑。

二、重写__delattr__方法

重写语法:

__delattr__(self,属性)

语法释义

__delattr__语法很简单:

1)self是所有实例方法都必须有的第一个参数,大家如果有疑问可以参考老猿前面的博文《第7.5节 揭开Python类中self的面纱》;

2)属性与前面__ getattribute__方法和__setattr__方法一样,是字符串,字符串内是属性的名字;

3)重写该方法时,如果除了开发人员自己添加的逻辑,如果要实现真正的属性删除,必须调用父类的__delattr__方法,否则相关属性不会清除。

三、案例

案例说明

案例中定义了类Car,类中有构造方法、__delattr__方法,有2个实例变量power、totaldistance,用该类定义实例对象car,对相关属性执行del操作,看执行结果。

案例代码及输出(交互模式执行)

>>> class Car():

refcount = 0

def __init__(self, power):

self.power = power

self.totaldistance=0

def __delattr__(self,name):

print(f"execute __delattr__:name={name}")

super().__delattr__(name)

>>> car = Car('汽油发动机')

>>> car.__dict__ #查看自定义实例变量

{'power': '汽油发动机', 'totaldistance': 0}

>>> del car.power #触发了__delattr__的执行

execute __delattr__:name=power

>>> car.__dict__ #查看实例变量,power已经删除了

{'totaldistance': 0}

>>> del car.__dict__ #删除__dict__,触发了__delattr__的执行

execute __delattr__:name=__dict__

>>> car.__dict__ #查看实例变量,字典清空了,并不是__dic__删除了

{}

>>>

案例截屏

8a4f821fc9b137c534c87179860ed810.png

案例小结

通过以上案例可以看到:

1)删除实例变量包括特殊变量都会触发__delattr__方法执行;

2)删除__dict__并没有真正删除该变量,这应该是object类的__delattr__方法进行了特殊处理,重写的__delattr__方法也可以进行类似这种特殊处理。

本节介绍了重写__delattr__方法的相关内容,建议大家只有在应用有特殊逻辑需要处理时才重写该方法,如将容器删除编程容器元素清零处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值