Python属性访问拦截器的用法
__ 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属性访问拦截器的用法相关推荐
- python装饰器 property_介绍Python的@property装饰器的用法
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑.为了限制score的 ...
- 介绍Python的@property装饰器的用法_python_脚本之家
介绍Python的@property装饰器的用法_python_脚本之家 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Studen ...
- axios 拦截器——基本用法及拦截器代码
之前在开发后台管理系统时,都是跟其他同事一起开发,说实在点,就是在别人开发的基础上写页面... 现在想把之前没有关注的点拾起来.. 今天看下axios拦截器的用法 用vue写代码在做ajax请求时,可 ...
- Vue学习笔记:axios 拦截器的用法
Vue学习笔记:axios 拦截器的用法 什么是axios 拦截器? 拦截器就是拦截每一次的请求和响应,然后进行相应的处理.请求拦截器,它可以统一在你发送请求前在请求体里加上token:响应拦截器,是 ...
- python属性和方法的区别_Python中几种属性访问的区别与用法详解
起步 在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个name属性,那便可以使用foo.name对此属性进行访问.一般而言, ...
- python属性访问顺序_Python 对象属性的访问
在 Python 中,一切皆对象.属性访问可以理解为是从一个已有的对象中获得另一个对象的方法.对象属性的访问涉及到对象的 __dict__ 属性.描述符等概念,以及 __getattribute__. ...
- springMVC之mvc:interceptors拦截器的用法
1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors><!-- 日志拦截器 --><mvc:interceptor>< ...
- HandlerInterceptor 处理器拦截器的用法
SpringMVC 中的HandlerInterceptor 拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. (如无特殊说明,下文所说的拦截器即处理器拦截器) ...
- SSH允许跨域访问拦截器配置
1. 添加拦截器类AjaxFilter import java.io.IOException; import javax.servlet.Filter; import javax.servlet.Fi ...
最新文章
- js中获取时间new date()的用法
- Java 开发人员必知必会的 20 种常用类库和 API
- source insight 解决自动缩进 和 TAB键=4个SPACE
- linux 内核文件结构,linux-011内核文件结构图
- PHP超链接传数据库值格式,php – 使用超链接更新数据库
- php ip重复注册,php中表单的重复提交怎么通过记录IP来防止
- Linux oracle中文乱码的问题解决
- [转载] hexo categories和tags页面不显示解决办法
- 科沃斯扫地机器人电路原理图_科沃斯扫地机器人不工作故障维修(CEN550)
- 渗透测试/应急演练过程中metasploit制作木马连接失败问题排查
- 计算机无法打印图片,为什么电脑打印不了图片 电脑里的图片无法打印处理方法...
- 串口485接法图_485通讯接线方式
- 51单片机自学--PWM波占空比程序解释
- 关于win11系统下查看无线网络密码的方式
- 利用java创建Excel表格步骤
- 单片机实例2——模拟开关灯(硬件电路图+汇编程序+C语言程序)
- gear s3刷android wear,【干货】三星Gear S3/Gear S3 classic 智能手表刷机教程
- 自定义安装office2019
- maven 依赖包问题
- 破解企业服务支付难题,SaaS与支付如何深度融合?