__ getattribute__()方法是属性访问时的拦截器,每当访问属性的时候,会先执行这个方法,然后再执行访问属性的操作步骤,可以用来记录属性访问的log。

简单说,想知道谁访问了你的某个变量,就用__ getattribute__()方法

代码示例如下:

class Itcast(object):def __init__(self, subject1):self.subject1 = subject1self.subject2 = "haha"def __getattribute__(self, obj): #重写父类的__getattribute__方法,形参obj是访问的属性,是一个属性名字字符串print("*******>%s"%obj)if obj == "subject1":        #如果属性名是subject1,可以做一些操作print("log subject1")return "python"else:              #else必须写,如果不写,那subject2以及show方法就访问不到了temp = object.__getattribute__(self,obj)   #调用父类的__getattribute__方法print("------>%s"%str(temp))return temp      #不写return的话,show方法无法执行def show(self):print("this is Itcast")s = Itcast("python")
print(s.subject1)
print(s.subject2)
s.show()             #show方法执行的时候也会先走属性拦截器方法

千万注意:__ getattribute__方法里面不能再使用self.的方式调用属性或者方法,因为你这样用,等于执行self.这句话的时候,又要先执行__ getattribute__方法,执行这个方法的时候,执行到self.又开始执行__ getattribute__方法,那你就死循环到这里了。

如果需要对某些属性进行记录log,可以按照参考下面的代码,修改print(item)为记录log的代码块

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class D(object):def __init__(self):self.num = 0def __getattribute__(self, item):if item == "num":print(item)        #如果访问的属性名字叫num,则记录logtemp = object.__getattribute__(self, item)   #调用父类方法把原来num的值返回去return tempelse:temp = object.__getattribute__(self, item)return tempa = D()
print(a.num)

Python属性访问拦截器的用法相关推荐

  1. python装饰器 property_介绍Python的@property装饰器的用法

    在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑.为了限制score的 ...

  2. 介绍Python的@property装饰器的用法_python_脚本之家

    介绍Python的@property装饰器的用法_python_脚本之家 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Studen ...

  3. axios 拦截器——基本用法及拦截器代码

    之前在开发后台管理系统时,都是跟其他同事一起开发,说实在点,就是在别人开发的基础上写页面... 现在想把之前没有关注的点拾起来.. 今天看下axios拦截器的用法 用vue写代码在做ajax请求时,可 ...

  4. Vue学习笔记:axios 拦截器的用法

    Vue学习笔记:axios 拦截器的用法 什么是axios 拦截器? 拦截器就是拦截每一次的请求和响应,然后进行相应的处理.请求拦截器,它可以统一在你发送请求前在请求体里加上token:响应拦截器,是 ...

  5. python属性和方法的区别_Python中几种属性访问的区别与用法详解

    起步 在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个name属性,那便可以使用foo.name对此属性进行访问.一般而言, ...

  6. python属性访问顺序_Python 对象属性的访问

    在 Python 中,一切皆对象.属性访问可以理解为是从一个已有的对象中获得另一个对象的方法.对象属性的访问涉及到对象的 __dict__ 属性.描述符等概念,以及 __getattribute__. ...

  7. springMVC之mvc:interceptors拦截器的用法

    1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors><!-- 日志拦截器 --><mvc:interceptor>< ...

  8. HandlerInterceptor 处理器拦截器的用法

    SpringMVC 中的HandlerInterceptor 拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. (如无特殊说明,下文所说的拦截器即处理器拦截器) ...

  9. SSH允许跨域访问拦截器配置

    1. 添加拦截器类AjaxFilter import java.io.IOException; import javax.servlet.Filter; import javax.servlet.Fi ...

最新文章

  1. js中获取时间new date()的用法
  2. Java 开发人员必知必会的 20 种常用类库和 API
  3. source insight 解决自动缩进 和 TAB键=4个SPACE
  4. linux 内核文件结构,linux-011内核文件结构图
  5. PHP超链接传数据库值格式,php – 使用超链接更新数据库
  6. php ip重复注册,php中表单的重复提交怎么通过记录IP来防止
  7. Linux oracle中文乱码的问题解决
  8. [转载] hexo categories和tags页面不显示解决办法
  9. 科沃斯扫地机器人电路原理图_科沃斯扫地机器人不工作故障维修(CEN550)
  10. 渗透测试/应急演练过程中metasploit制作木马连接失败问题排查
  11. 计算机无法打印图片,为什么电脑打印不了图片 电脑里的图片无法打印处理方法...
  12. 串口485接法图_485通讯接线方式
  13. 51单片机自学--PWM波占空比程序解释
  14. 关于win11系统下查看无线网络密码的方式
  15. 利用java创建Excel表格步骤
  16. 单片机实例2——模拟开关灯(硬件电路图+汇编程序+C语言程序)
  17. gear s3刷android wear,【干货】三星Gear S3/Gear S3 classic 智能手表刷机教程
  18. 自定义安装office2019
  19. maven 依赖包问题
  20. 破解企业服务支付难题,SaaS与支付如何深度融合?

热门文章

  1. 解决beautifulsoup代码无效问题
  2. WordPress添加固定位置的百度分享按钮
  3. Google Map API使用详解(十)——使用JavaScript创建地图详解(上)
  4. 【学习笔记】高等数据基础
  5. 【疑问】SD更新凭证流
  6. 【VC基础】 4、变式表(Variant Table)
  7. oracle11g-expdp-impdp步骤
  8. 【转】登录后自动显示未读快件
  9. ABAP在ALV工具栏显示一个计时器
  10. SAP Leonardo及客户案例