python中__getattr__,__setattr__,__getattribute__的区别
来源:互联网 发布:剑灵捏脸超萌萝莉数据 编辑:程序博客网 时间:2024/05/18 03:11
首先来看看上述三个魔法方法的定义吧:
(1)__getattr__(self, item):
在访问对象的item属性的时候,如果对象并没有这个相应的属性,方法,那么将会调用这个方法来处理。。。这里要注意的时,假如一个对象叫fjs, 他有一个属性:fjs.name = "fjs",那么在访问fjs.name的时候因为当前对象有这个属性,那么将不会调用__getattr__()方法,而是直接返回了拥有的name属性了
(2)__setattr__(self, item, value):
当试图对象的item特性赋值的时候将会被调用。。
(3)__getattribute__(self, item):
这个只有在新式类中才有的,对于对象的所有特性的访问,都将会调用这个方法来处理。。。可以理解为在__getattr__之前
嗯。。。有了这几个方法就可以干很多很多的事情了。。。例如拦截器啥的。。。动态代理啥的。。。很方便就能实现了。。。起码比用Java实现类似的功能方便多啦。。。。
不过需要注意的时候,在重写这些方法的时候需要特别的小心,因为容易引起循环调用。。。。
这里先来举一个例子,用于实现拦截所有的特性访问,在访问的时候打log啥的:
上述代码的输出如下:
很简单就实现了拦截的功能吧。。。而且这里可以知道__getattribute__方法拦截了属性和方法的访问。。这里也就是所谓的所有的特性的访问了。。不过要注意的是:__getattribute__只有在新式类中才能用的。。。
嗯。。接下来配合使用__getattr__和__getattribute__来实现一个非切入式的编程:
这里通过__getattr__方法,将所有的特性的访问都路由给了内部的fjs对象。。。。。。
最后,关于__setattr__()方法,这个就不细说了。。。不过他的使用还需要特别注意一些。。因为稍不注意就容易陷入循环调用了。。。。
- python中__getattr__,__setattr__,__getattribute__的区别
- Python __getattr__ __getattribute__ __setattr__
- python __setattr__, __getattr__, __delattr__,__getattribute__
- python中__get__,__getattr__,__getattribute__的区别
- python中__get__,__getattr__,__getattribute__的区别
- python中__get__,__getattr__,__getattribute__的区别
- python中__get__,__getattr__,__getattribute__的区别
- python魔法方法:__getattr__,__setattr__,__getattribute__
- python魔法方法:__getattr__,__setattr__,__getattribute__
- Python中 __getattr__ __setattr__
- python中__getattribute__与__getattr__调用时的区别
- python中__getattr__()和__getattribute__()方法的区别
- 详解Python中 __get__和__getattr__和__getattribute__的区别
- python __getattribute__ 和 __getattr__的区别
- python3中__get__,__getattr__,__getattribute__的区别
- __getattr__,__setattr__,__delattr__与__getattribute__
- __getattr__和__getattribute__的区别
- python中__get__, __getattr__和__getattribute__区别说明
- iOS开发之Quartz 2D绘制小黄人
- Vlc开发总结
- C++ static
- HDU3172 UVA11503 Virtual Friends
- 451. Sort Characters By Frequency
- python中__getattr__,__setattr__,__getattribute__的区别
- leetcode 147. Insertion Sort List
- 适配器模式之接口适配
- 笔记——Activity生命周期
- 拼音字母
- Python常用正则表达式爬取网页信息及分析HTML标签总结
- Python简单爬虫
- Git stash: “Cannot apply to a dirty working tree, please stage your changes”
- 最最基础的最小二乘法优化