python 魔法方法
2017-09-29 11:16
330 查看
__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']='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__)
相关文章推荐
- python魔法方法-属性访问控制详解
- python魔法方法
- python的魔法方法
- python魔法方法-比较相关
- python学习七(类中魔法方法、应用)
- python 魔法方法
- 洗礼灵魂,修炼python(40)--面向对象编程(10)—定制魔法方法+time模块
- python魔法方法-自定义序列详解
- Python(8) 魔法方法 `__name__`
- python魔法方法-属性转换和类的表示
- python魔法方法-属性转换和类的表示详解
- python核心---__slots__魔法方法
- python魔法方法
- 零基础入门学习Python(24):魔法方法(4)描述符
- python魔法方法:__getattr__,__setattr__,__getattribute__
- python的魔法方法之__str__(二)
- 【python 】魔法方法
- 一个python实现的有魔法方法(magic method)的单链表(静态链表)
- Python魔法方法参数的查询
- Python 魔法方法与属性