1. __getattr__(self, item):

在访问对象的item属性的时候,如果对象并没有这个相应的属性,方法,那么将会调用这个方法来处理。。。这里要注意的时,假如一个对象叫fjs,  他有一个属性:fjs.name = "fjs",那么在访问fjs.name的时候因为当前对象有这个属性,那么将不会调用__getattr__()方法,而是直接返回了拥有的name属性了

2. __setattr__(self, item, value):

当试图对象的item特性赋值的时候将会被调用。

# -*- coding:utf-8 -*-
class Student:def __init__(self, work, score):self.work = workself.score = scoredef __getattr__(self, item):return item + ' is not exits'def __setattr__(self, key, value):self.__dict__[key] = value#object.__setattr__(self, key, value)  两条语句等效def __delattr__(self, name):print("你正在删除一个属性")return super().__delattr__(name)def __getitem__(self, item):return self.__dict__[item]def __setitem__(self, key, value):self.__dict__[key] = values = Student()
print(s.name)  # 调用__getattr__方法 输出'name is not exits'
s.age = 1  # 调用__setattr__ 方法
print(s.age)  # 输出 1
print(s['age'])  # 调用 __getitem__方法 输出1
s['name'] = 'tom'  # 调用 __setitem__ 方法
print(s['name'])  # 调用 __getitem__ 方法 输出 'tom'del s.work # 调用__delattr__方法
try:print(s.work)    # 输出 'MyClass' object has no attribute 'work'
except AttributeError as reason:print(reason)          

输出结果为:

name is not exits
1
1
tom

3. __getattribute__

class C(object):a = 'abc'def __getattribute__(self, *args, **kwargs):print("__getattribute__() is called")return object.__getattribute__(self, *args, **kwargs)
#        return "haha"def __getattr__(self, name):print("__getattr__() is called ")return name + " from getattr"def __get__(self, instance, owner):print("__get__() is called", instance, owner)return selfdef foo(self, x):print(x)class C2(object):d = C()
if __name__ == '__main__':c = C()c2 = C2()print(c.a)print(c.zzzzzzzz)c2.dprint(c2.d.a)

输出结果

__getattribute__() is called
abc
__getattribute__() is called
__getattr__() is called
zzzzzzzz from getattr
__get__() is called <__main__.C2 object at 0x16d2310> <class '__main__.C2'>
__get__() is called <__main__.C2 object at 0x16d2310> <class '__main__.C2'>
__getattribute__() is called
abc

Python__getattr__、__setattr__、__delattr__、__getitem__、__setitem__、__getattribute__方法的理解相关推荐

  1. python 魔法方法之:__getitem__ __setitem__ __delitem__

    python的魔法方法: 在Python中,如果我们想实现创建类似于序列和映射的类,可以通过重写魔法方法__getitem__.__setitem__.__delitem__.__len__方法去模拟 ...

  2. 【转】五、谈扩展方法的理解

    [转]五.谈扩展方法的理解 为什么要用扩展方法 在说什么是扩展方法之前我们先来说说为什么要用扩展方法. 首先我们定义一个 Person 类: public class Person {/// < ...

  3. python threading模块的方法_Python THREADING模块中的JOIN()方法深入理解

    看了oschina上的两个代码,受益匪浅.其中对join()方法不理解,看python官网文档的介绍: join([timeout]):等待直到进程结束.这将阻塞正在调用的线程,直到被调用join() ...

  4. sklearn中GBDT的一些参数、属性、方法的理解

    文章目录 GBDT 分类器 引入 重要参数 loss learning_rate subsample n_estimators criterion max_depth min_samples_leaf ...

  5. 频域分析方法的理解(信号、频谱、能量谱、功率谱、倒频谱、小波分析)(终极教程)

    信号频域分析方法的理解(频谱.能量谱.功率谱.倒频谱.小波分析) 参考文献,值得一读 https://blog.csdn.net/fengzhuqiaoqiu/article/details/1011 ...

  6. hashCode()、equals()以及compareTo()方法的理解

    原文出自:http://blog.sina.com.cn/s/blog_50d936c40100nvzz.html hashCode().equals()以及compareTo()方法的理解 转载▼ ...

  7. [react] 请说说你对react的render方法的理解

    [react] 请说说你对react的render方法的理解 render是class组件中必须被重载的方法,组件执行render方法的条件如下: 初始渲染 this.setState方法,参数不能为 ...

  8. [css] 请描述下你对translate()方法的理解

    [css] 请描述下你对translate()方法的理解 Single length/percentage value一个长度值或百分比表示X轴和Y轴使用一样的值进行二维上的平移.等同于transla ...

  9. C#回调函数应用示例,形象比喻方法助理解

    C#回调函数应用示例,形象比喻方法助理解,整理了一个简单的例子来说明回调函数的用法: namespace CallBackFunction {     class Program     {      ...

最新文章

  1. 中国开源大爆发进行时,你没掉队吧?
  2. 一秒回到P图前:Adobe发布“反向PS”利器,知道你修过哪里,还帮你修回去
  3. 计算机科学术语,计算机科学中的术语(2)
  4. 卷积为什么如此强大?理解深度学习中的卷积
  5. 2021消费者置业信心指数报告
  6. 无盘服务器性能测试,无盘系统性能测试及结语
  7. 一线互联网架构师设计思想解读开源框架!全套教学资料
  8. 判断当前日期是否在[startDate, endDate]区间
  9. 《Managed DirectX +C# 开发(入门篇)》系列文章
  10. 《数学之美》—贾里尼克和现代语言处理
  11. 日报管理系统_设备维护管理系统的自动化报告功能
  12. 【毕业设计】基于STM32的公交站牌系统 - 物联网 嵌入式 单片机
  13. 【游戏策划】【碎碎念】关于横版跳跃类游戏的关卡设计
  14. et文件丢失怎么恢复?5种恢复方法轻松掌握
  15. 2022年全球及中国多功能压力锅市场份额预测与投资竞争格局调查报告
  16. VCC和GND短路,怎么找问题?
  17. 30A的MOS现在价格都下探到1块了,为什么你还在用继电器?
  18. 语音助手——多轮会话(理论概念篇)
  19. 更新数据update
  20. C语言画伯德图程序,已知系统的传递函数,试绘制系统的伯德图。 (1) (2)

热门文章

  1. Infographic Modern Graphs Mac(现代信息图表动画fcpx插件)
  2. seo全攻略_SaaS 企业推广获客全攻略(2):如何做好企业官网?
  3. 组合数学 算法导论 具体数学 博弈论 计算机科学数学
  4. vue部署到服务器_利用Gulp实现代码自动化部署
  5. jsonview浏览器插件 查看格式化json数据
  6. Java通过反射了解集合泛型的本质(Class反射都是在运行时执行的)
  7. C++|Qt工作笔记-Windows平台下的句柄与Qt中QWindow::winId()以及 QPlatformWindow::handle的区别与联系
  8. Qt工作笔记-信号与槽参数匹配问题
  9. C++ STL string的输出
  10. 多路查找树之2-3树(理论)