getattribute方法,Python属性访问拦截器的用法
__getattribute__()方法是属性访问时的拦截器,每当访问属性的时候,会先执行这个方法,然后再执行访问属性的操作步骤,可以用来记录属性访问的log。代码示例如下:
class Itcast(object):
def __init__(self, subject1):
self.subject1 = subject1
self.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的代码块
class D(object):
def __init__(self):
self.num = 0
def __getattribute__(self, item):
if item == "num":
print(item) #如果访问的属性名字叫num,则记录log
temp = object.__getattribute__(self, item) #调用父类方法把原来num的值返回去
return temp
else:
temp = object.__getattribute__(self, item)
return temp
a = D()
print(a.num)
getattribute方法,Python属性访问拦截器的用法的更多相关文章
- python属性访问
1.python属性访问魔法方法: >>> class C: def __getattribute__(self,name): print("getattribute&qu ...
- SpringBoot静态资源访问+拦截器+Thymeleaf模板引擎实现简单登陆
在此记录一下这十几天的学习情况,卡在模板引擎这里已经是四天了. 对Springboot的配置有一个比较深刻的认识,在此和大家分享一下初学者入门Spring Boot的注意事项,如果是初学SpringB ...
- C#中方法,属性与索引器
C#中方法,属性与索引器: TODO: 1,关于系统中常常出现的通过某一字段,查询相应实体信息(可能是一条字段或一条数据和一组泛型集合) 解说篇:1,方法,2,属性3.索引器 1.方法(1.依据状态编 ...
- ie8 报错:意外地调用了方法或属性访问
在某场景中一句简单的js: $("#changeOption").text("增加"); 在 IE8 下面报错:'意外地调用了方法或属性访问' 改成:$(&qu ...
- 简单说明Python中的装饰器的用法
简单说明Python中的装饰器的用法 这篇文章主要简单说明了Python中的装饰器的用法,装饰器在Python的进阶学习中非常重要,示例代码基于Python2.x,需要的朋友可以参考下 装饰器对与 ...
- Python魔法方法之属性访问 ( __getattr__, __getattribute__, __setattr__, __delattr__ )
通常情况下,我们在访问类或者实例对象的时候,会牵扯到一些属性访问的魔法方法,主要包括: ① __getattr__(self, name): 访问不存在的属性时调用 ② __getattribute_ ...
- springMVC之mvc:interceptors拦截器的用法
1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors> <!-- 日志拦截器 --> <mvc:interceptor> ...
- springmvc中的拦截器interceptor用法
1.配置拦截器 在springMVC.xml配置文件增加: 1 <mvc:interceptors> 2 <!-- 日志拦截器 --> 3 <mvc:intercepto ...
- 【Python045-魔法方法:属性访问】
一.属性的几种访问方式 1.类.属性名 >>> class C: def __init__(self): self.x = 'X-man' >>> c = C() ...
随机推荐
- 【Python3网络爬虫开发实战】 分析Ajax爬取今日头条街拍美图
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:haoxuan10 本节中,我们以今日头条为例来尝试通过分析Ajax请求 ...
- tensorflow add_to_collection用法
训练代码: # coding: utf-8 from __future__ import print_function from __future__ import division import t ...
- 002_Java语言基础
------------恢复内容开始------------ 存储的基本单元:byte: 1 byte = 8 bit(位) 1 KB = 1024 byte 1 MB = 1024 KB 1 GB ...
- TOMCAT_server.xml
该文件描述了如何启动Tomcat Server <Server> <Listener /> <GlobaNamingResources> < ...
- 201871010119-帖佼佼《面向对象程序设计(java)》第四周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh ...
- Android(常用)主流UI开源库整理
这几天刚做完一个项目..有点空余时间,就想着吧这一两年做的项目中的UI界面用到的一些库整理一下.后来想了一下,既然要整理,就把网上常用的 AndroidUI界面的主流开源库 一起整理一下,方便查看. ...
- NodeJS4-6静态资源服务器实战_range范围请求
range范围请求:向服务器发起请求可以申明我想请求判断内容的范围,从多少个字节到多少个字节,一次要求把所有的内容拿回来,服务器在得到相应的请求之后,从拿到对应的文件,拿到对应的字节返回给客户端.要实 ...
- poj 1321 棋盘问题 (回溯法)
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 69951 Accepted: 33143 Descriptio ...
- Typroa 常用快捷键
Typora 常用快捷键 文件操作 Ctrl + N :新建文件 Ctrl + shift + N :新建窗口 Ctrl + O :打开 Ctrl + P : 快速打开(快速打开之前编辑过的历史文件) ...
- 常用数据结构之ArrayList
前言 ArrayList想必是广大Java程序员开发时最常用的数据结构了,但不一定对其原理都有了解,今天我将结合ArrayList的源码对其进行讲解.本文将围绕ArrayList主要特性(包括适用场景 ...