__getitem__、__setitem__、__delitem__

总结:

__getitem__,__setitem_,__delitem__  :  obj[‘属性’]的方式去操作属性时触发的方法
__getitem__:obj['属性'] 时触发
__setitem__:obj['属性']=属性的值 时触发
__delitem__:del obj['属性'] 时触发

赋值的底层原理都一样

f1.name = 'zhaok' #做的就是往属性字典里添加或覆盖值,原理:--->setattr----->f1.__dict__['name'] = 'egon'
f1['name'] = 'zhaok' --->setitem----->f1.__dict__['name'] = 'egon'
两个方法的底层都是一样的,只不过通过setattr,setitem中转了一下


区别:

__getattr__,__setattr__,__delattr__
obj点的方式去操作属性时触发的方法
__getitem__,__setitem_,__delitem__
obj[‘属性’]的方式去操作属性时触发的方法

__getattr__:obj.属性 不存在时触发
__setattr__:obj.属性=属性的值 时触发
__delattr__:del obj.属性 时触发

__getitem__:obj['属性'] 时触发
__setitem__:obj['属性']=属性的值 时触发
__delitem__:del obj['属性'] 时触发

class Foo:def __init__(self,name):self.name = namedef __getitem__(self, item):print('__getitem__执行,%s'%item)def __setitem__(self, key, value):print('__setitem__执行')self.__dict__[key] = value      #执行添加对象的属性字典def __delitem__(self, key):print('__delitem__执行')self.__dict__.pop(key)          #删除对象f1['aaa']='999'f1 = Foo('aa')  #实例化对象
f1['age']       #通过字典的方式查询,会触发__getitem__的运行
f1.aaa
f1.name = 'zhaok'   #添加实例属性,以.的方式去设置属性,并不会触发__setitem__的执行
f1.age = 18
f1.sex = '女'
f1['sex'] = '男'     #以字典的方式去访问,会触发item的执行,以点的方式访问会执行attr类型的函数
print(f1.__dict__)

转载于:https://www.cnblogs.com/liyanbin/p/7610163.html

python 魔法方法相关推荐

  1. python 魔法方法常用_Python魔法方法指南

    有很多人说学习Python基础之后不知道干什么,不管你是从w3c还是从廖雪峰的教程学习的,这些教程都有一个特点:只能引你快速入门,但是有关于Python的很多基础内容这些教程中都没介绍,而这些你没学习 ...

  2. python魔法方法长文详解

    python魔法方法详解 1. 什么是魔法方法 魔法方式(Magic methods)是python的内置函数,一般以双下划线开头和结尾,比如__add__,__new__等.每个魔法方法都有对应的一 ...

  3. Python 魔法方法详解

    什么是Python魔法方法 魔法方法就如同它的名字一样神奇,总能在你需要的时候为你提供某种方法来让你的想法实现.魔法方法是指Python内部已经包含的,被双下划线所包围的方法,这些方法在进行特定的操作 ...

  4. python 魔法方法诠释

    什么是Python魔法方法 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两个下划线包围来命名的(比如 ini ...

  5. Python魔法方法

    文章目录 Python魔法方法 一. 概述 1. 魔法方法 2. 常用的魔法方法 二. 构造方法 1. `__new__` 2. `__init__` 3. `__del__` 三. 操作符 1. 简 ...

  6. Python魔法方法指南

    转自:http://pyzh.readthedocs.io/en/latest/python-magic-methods-guide.html 原文: http://www.rafekettler.c ...

  7. python魔法方法是什么_Python魔法方法指南(基础)

    什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两个下划线包围来命名的(比如__init__ ,__lt__ ) ...

  8. python魔法方法学不懂_Python进阶:Python魔法方法

    密圈内有好几个同学问我:学习完了Python基础之后,学些什么呢? 看到这个问题之后,我没在考虑学习基础之后学什么,而我在想真的学完了吗?想以前我也是对着w3c对着廖雪峰的网上教程学习了一遍Pytho ...

  9. python魔法方法_Python魔法方法指南

    有很多人说学习Python基础之后不知道干什么,不管你是从w3c还是从廖雪峰的教程学习的,这些教程都有一个特点:只能引你快速入门,但是有关于Python的很多基础内容这些教程中都没介绍,而这些你没学习 ...

  10. python魔法方法_python,魔法方法指南

    1.简介 本指南归纳于我的几个月的博客,主题是 魔法方法 . 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两 ...

最新文章

  1. openssl 生成 cert.key cert.pem
  2. java解析lrc_java中用正则表达式解析LRC文件
  3. CoreOS rpm-ostree简介
  4. 蓝桥杯2015年第六届C/C++省赛B组第一题-奖券数目
  5. 基于Java Web的学生选课管理系统设计与实现
  6. refprop物性库_Refprop9.1_Refprop(制冷剂物性查询软件)下载 v9.1免费版 附教程 - 121下载站...
  7. 《Kafka权威指南》读书笔记
  8. ureport2报表详细使用(一)-集成及配置
  9. 极光尔沃3D打印《英雄联盟》精美手板
  10. python 合并txt文件
  11. 为手机游戏而生的Linux 发行版
  12. easypoi插入超链接
  13. js原型链,继承和promis的基本理解
  14. java连接qq邮箱_Java使用qq邮箱发邮件实现
  15. 联发科6758_联发科p70相当于骁龙什么处理器型号 对比骁龙675哪个好
  16. html静态页面作业——酷酷动物主题响应式网页(5页) 大学生动物主题网页作品 动物网页设计作业模板 学生网页制作源代码下载
  17. python爬虫爬取拉勾网职业信息
  18. CPU设计实战 第5章 实践任务
  19. X-admin经典前端后台管理模板,基于layui的轻量级前端后台管理框架,简单,兼容性好,面向所有层次的前后端程序
  20. android 系统 os 区别,安卓系统和Yun OS系统区别在哪里?还是阿里更会玩

热门文章

  1. 转换成的jar文件接收后台的信息乱码cmd解决办法
  2. mbed OS - ARM关于物联网(IoT)的战略布局
  3. concurrency runtime学习笔记之二:并行
  4. 时间的正则表达式验证
  5. CodeProject - 在C#使用SHGetFileInfo获取(管理)文件或者文件夹图标(C#封装Win32函数的一个例子)...
  6. LeetCode(509)——斐波那契数(JavaScript)
  7. 力扣 O(1) 时间插入、删除和获取随机元素 - 允许重复
  8. volte 是什么意思
  9. 基金份额净值估值是什么?
  10. 为什么民营银行,农村商业银行存款,定期存款利率比五大行还高?