__getitem__,__setitem__,__delitem__
__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 = name
def __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']='' f1 = Foo('aa') #实例化对象
f1['age'] #通过字典的方式查询,会触发__getitem__的运行
f1.aaa
f1.name = 'zhaok' #添加实例属性,以.的方式去设置属性,并不会触发__setitem__的执行
f1.age = 18
f1.sex = '女'
f1['sex'] = '男' #以字典的方式去访问,会触发item的执行,以点的方式访问会执行attr类型的函数
print(f1.__dict__)
__getitem__,__setitem__,__delitem__的更多相关文章
- python 魔法方法之:__getitem__ __setitem__ __delitem__
h2 { color: #fff; background-color: #7CCD7C; padding: 3px; margin: 10px 0px } h3 { color: #fff; back ...
- python中的__len__,__getitem__ __setitem__ __delitem__ __contains__
可变集合需要实现: __len__ __getitem__ __setitem__ __delitem__不可变集合需要实现: __len__ __getitem__ __len__:返回 ...
- __getitem__ __setitem__ __delitem__ 使用
#__getitem__ __setitem__ __delitem__运行设置key value值了class fun: def __init__(self): print('test') def ...
- Python的魔法函数之 - __len__,__getitem__,__setitem__,__delitem__
# 对象作为len()函数的参数是必须实现该方法 __len__ # 使用类似字典方式访问成员时必须实现 dic['pro_name'] __getitem__ # 使用类似字典方式设置成员时必须实现 ...
- day7_python之面向对象item系列(__getitem__,__setitem__,__delitem__)
class Foo: def __getitem__(self, item): print('=====>get') return self.__dict__[item] def __setit ...
- __setitem__和__getitem__和__delitem__
__setitem__和__getitem__和__delitem__ class Foo: def __init__(self, name): self.name = name def __geti ...
- python类内部方法__setattr__ __getattr_ __delattr__ hasattr __getattribute__ __getitem__(),__setitem__(), __delitem__()
主要讲类的内部方法 __setattr__ __getattr_ __delattr__ hasattr __getattribute__ __getitem__(),__setitem__ ...
- Python __setitem__()、__getitem__()、__delitem__()
转载:http://blog.csdn.net/xhw88398569/article/details/48690163 __xxxitem__:使用 [''] 的方式操作属性时被调用 __setit ...
- isinstance和issubclass,__getattribute__,__getitem__,__setitem__,delitem__,__str__(三十五)
isinstance(obj,cls)检查是否obj是否是类 cls 的对象 issubclass(sub, super)检查sub类是否是 super 类的派生类 class Foo: def __ ...
随机推荐
- 7-2 jmu-python-猜数游戏(10 point(s)) 【python】
7-2 jmu-python-猜数游戏(10 point(s)) 用户从键盘输入两个整数,第一个数是要猜测的数n(<10),第二个数作为随机种子,随机生成一个1~10的整数,如果该数不等于n,则 ...
- linux 启动引导器 grub,单用户模式:
Linux启动引导器 安装linux操作系统的时候就已经将启动引导器安装到硬盘上去了,才能通过硬盘的读取方式启动操作系统. 引导器分为2种: Lilo:功能比较简单,使用比较麻烦,后续发行版中使用gr ...
- 创建一个catkin工作空间
先确定自己的环境变量是否设置正确 export | grep ROS 若出现如下的,说明是正确的 declare -x ROSLISP_PACKAGE_DIRECTORIES="" ...
- 脚踏实地学C#1-基元类型
基元类型:编译器直接支持的数据类型 基元类型直接映射到FCL类库上,如int 和Int32是等价的,只不过是int是c#提供的,Int32是FCL类库提供的. int只是Int32的别名 using ...
- socket即时聊天
服务端 package com.luhan.text; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Gri ...
- 【MongoDB学习-在.NET中的简单操作类】
1.新建MVC项目, 管理NuGet包,进入下载MongDB.net库文件 2.新增项目DAL数据访问层,引用以下库文件: 3.C# 访问MongoDB通用方法类: using MongoDB.Dri ...
- 【C】貌似不友好的scanf()
scanf语句执行过程: (1)逆序取参数的偏移地址并分别入栈. (2)根据控制字符串的格式说明符从缓冲区取数据给各变量赋值. ①若格式说明符是数值类数据:如果从缓冲区中拿出的第一个字符可以合法表示该 ...
- codevs1068乌龟棋
codevs1068乌龟棋 1068 乌龟棋 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamon 题目描述 Descrip ...
- 开发板启动时,内核打印出"can't access tty,job control turned off"
启动后的最后一行提示can't access tty,job control turned off, 这说明没有进入到控制台,原因就在于文件系统的/etc/inittab 这个文件里有问题 vi /e ...
- const用在成员函数之后的情况
常成员函数 使用const关键字进行说明的成员函数,称为常成员函数.只有常成员函数才有资格操作常量或常对象,没有使用const关键字说明的成员函数不能用来操作常对象.常成员函数说明格式 ...