pythongetattribute方法怎么用_Python属性拦截器getattribute的正确使用及应用场景

属性拦截器__getattribute__,作为Python常用内建属性之一,在实际业务应用场景中有较大作用;但是,这也是一个充满陷阱的方法,不注意就将陷入拦截器制造的死循环中,直到代码奔溃退出,本篇讲解__getattribute__的使用及其一些应用场景。

c78fd66b810bd57d0d419fe64143c803.png

在本博客开发中就遇到这样一个场景:在多级评论功能中,要实现后台可以删除评论,但是在数据库并不真正删除,因为评论之间有着关联关系,一旦删除后将出现多米诺牌效应;因此要实现后台可删除该评论,同时数据库不真正删除,前端显示该评论删除的需求;对于这个问题有不同语言有不同的实现方式,但是使用Python的属性拦截器无疑是最简单的方案。

efc56131b59fc504e361f86f3d9cd765.png

其基本方案是在定义评论模型的时候,增加一个删除标记字段,当获取评论内容的时候,设置的属性拦截器会先检查删除标记的字段,如果标记删除就返回“该评论已被删除”,如果是未被标记删除的字段就显示正常评论内容。

__getattribute__使用方法:

需要注意的是:复写了类自带的拦截器后,对于不在拦截范围的属性要调用自带的object.__getattribute__(self, item)返回正常值,对于我们需要拦截的属性,不能再通过class.name去访问原来的属性值,不然导致死循环,访问本拦截属性的正确方法是通过class.__dict__访问属性字典集合。

dc482ccb6938731aa2d4beccb77e88ef.png

通过该方法,我们在访问被拦截属性的时候,就会先对其有效性进行效验,然后按照我们的设定返回值;不得不说属性拦截器在实际业务应用中也有着非常大的价值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值