python 中的魔术方法 getitem setitem
python 中的魔术方法 getitem setitem
https://docs.python.org/3/reference/datamodel.html?highlight=iter#object.__getitem__
https://blog.csdn.net/weixin_42557907/article/details/81589574
class Tag:"""tag = Tag()tag['name'] ---> __getitem__"""def __getitem__(self, item):""":param item::return:"""print(f'__getitem__({item}) is called.')return 2def test_tag():tag = Tag()# __getitem__ is calledprint(tag['name']) # 2print(tag['frank']) # 2print(tag['laoda']) # 2if __name__ == '__main__':test_tag()
__getitem__ 这个方法被调用的时候 是执行 tag[key]的时候,
- __setitem__
这个方法 是 怎么用呢?
当实例 instance[‘key’] =‘frank’ ,这个时候会被调用.
class Tag:"""tag = Tag()tag['name'] ---> __getitem__tag['name'] ='frank' ----> __setitem__"""def __getitem__(self, item):""":param item::return:"""print(f'__getitem__({item}) is called.')return self.__dict__[item]def __setitem__(self, key, value):print("__setitem__:Set %s Value %s" % (key, value))self.__dict__[key] = valueif __name__ == '__main__':tag = Tag()# __setitem__ 被调用tag['name'] = 'frank'tag['laoda'] = 'liuxiaolu'tag['laoer'] = 'lile'tag['laosan'] = 'weiliang'# __getitem__ 被调用print(tag['name'])print(tag['laoda'])print(tag['laoer'])print(tag['laosan'])
result:
__setitem__:Set name Value frank
__setitem__:Set laoda Value liuxiaolu
__setitem__:Set laoer Value lile
__setitem__:Set laosan Value weiliang
__getitem__(name) is called.
frank
__getitem__(laoda) is called.
liuxiaolu
__getitem__(laoer) is called.
lile
__getitem__(laosan) is called.
weiliang
- __delitem__ 这个魔术方法 是什么时候调用呢?
删除一个 实例的属性的时候
比如 说 : del tag[‘name’] 就会调用 这个方法__delitem__
class Tag:"""tag = Tag()tag['name'] ---> __getitem__tag['name'] ='frank' ----> __setitem__del tag['name'] ----> __delitem__"""def __getitem__(self, item):""":param item::return:"""print(f'__getitem__({item}) is called.')return self.__dict__[item]def __setitem__(self, key, value):print(f"__setitem__:Set {key},Value {value}")self.__dict__[key] = valuedef __delitem__(self, key):print(f"__delitem__({key}) is called")del self.__dict__[key]if __name__ == '__main__':tag = Tag()# __setitem__ 被调用tag['name'] = 'frank'tag['laoda'] = 'liuxiaolu'tag['laoer'] = 'lile'tag['laosan'] = 'weiliang'# __getitem__ 被调用print(tag['laosan'])# __delitem__ 被调用del tag['laosan']try:print(tag['laosan'])except KeyError:print('key error occurred.')
result:
__setitem__:Set name,Value frank
__setitem__:Set laoda,Value liuxiaolu
__setitem__:Set laoer,Value lile
__setitem__:Set laosan,Value weiliang
__getitem__(laosan) is called.
weiliang
__delitem__(laosan) is called
__getitem__(laosan) is called.
key error occurred.
总结
python 中有很多魔术方法,主要探讨了__getitem__ , __setitem__ , __delitem__
这些魔术方法的基本使用. 其实 很多时候 有一些库里会使用这些魔术方法,这个时候 要去理解他们为什么 要实现这些方法, 这个就是python 的特性了, 需要不断的学习吧.
推荐阅读有一个实现
https://github.com/requests/requests/blob/master/requests/structures.py
CaseInsensitiveDict 对大小写不敏感的字典的实现,里面就有用了这几个魔术方法.
参考文档
https://github.com/requests/requests/blob/master/requests/structures.py
https://docs.python.org/3/reference/datamodel.html?highlight=iter#object.__getitem__
https://blog.csdn.net/weixin_42557907/article/details/81589574
分享快乐,留住感动. 2018-12-30 19:30:39 --frank
python 中的魔术方法 getitem setitem相关推荐
- python中的魔术方法
魔术方法 魔术方法就是一个类/对象中的方法,和普通方法唯一的不同时,普通方法需要调用!而魔术方法是在特定时刻自动触发. 1.__init__ 初始化魔术方法 触发时机:初始化对象时触发(不是实例化触发 ...
- Python中的魔术方法详解
介绍 在Python中,所有以"__"双下划线包起来的方法,都统称为"Magic Method",中文称『魔术方法』,例如类的初始化方法 __init__ ,P ...
- Python 中的魔术方法(双下划线开头和结尾的方法)
https://gitbook.cn/books/5ffd564919f81e0b10c9e39f/index.html https://www.cnblogs.com/pyxiaomangshe/p ...
- 详细介绍Python中的“魔术方法“__XXX___; 概述__str__()方法;__new__()方法; 三. __ new__ 和__init__的区别
概述 一.__str__方法 当不用__str__()时: 发现输出结果只有对象一串id地址信息; 当我们想打印出更多信息时,用__str__()方法; 二.new()方法 三. __ new__ 和 ...
- Python3中的魔术方法汇总
欢迎访问个人网络日志网站,获取最新文章! (二)Python中的魔术方法 1.魔术方法简介 Python 中的魔术方法(Magic)方法,是那些被__包围的方法,在对象继承时,子类可以重写父类的魔术方 ...
- python中的魔方方法
python中的魔方方法 魔法方法 含义 基本的魔法方法 new(cls[, -]) 1. new 是在一个对象实例化的时候所调用的第一个方法 2. 它的第一个参数是这个类,其他的参数是用来直接传递给 ...
- python 析构函数_常用的python类的魔术方法
对于很少使用python编写大型代码的朋友可能会忘记python还是一种面向对象的语言.在其他面向对象的语言中有构造函数.析构函数等等在生命周期不同时机自动调用的函数,python当然也是有的.除此之 ...
- python描述符魔术方法_Python类型转换的魔术方法详解
本文讨论python中将某个复杂对象转换为简单对象或数据类型的常用魔术放啊,这些在编程中是十分有用的. 1.__str__方法. 在讲解本方法前我们先打开一个jupyter notebook,随意创建 ...
- python中的魔法方法__new___Python魔法方法会调用new方法吗?
Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明:一.基本形式列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修 ...
最新文章
- timestomping 修改文件时间戳
- 全球及中国衣柜香氛市场投资份额与营销潜力研究报告2022版
- 使用literal语法格式化字符串
- ABAP Development Tool如何配置代码自动完成的快捷键
- P1217 [USACO1.5]回文质数 Prime Palindromes(技巧+暴力枚举+线性筛)
- docker-machine 下载iso慢的问题
- 分享一篇获取键盘数值的js(限制在IE浏览器)
- Python环境搭建及PyCharm下载安装
- 管理感悟:给自己编程水平打分
- 怎么利用计算机计算潮流计算,计算机潮流计算.ppt
- js根据经纬度计算距离
- QFont所有支持字体
- 清卡时提示“增值税未申报或未比对”
- Pandas数据分析(十年期国债收益率 与 十年期国债期货价格的相关性)
- abandon connection, owner thread: DubboServerHandler错误原因
- CANopen协议及应用
- 自己写的PDF转JPG的程序
- 分词器以及ik中文分词器
- 检测浏览器无痕模式下是否支持localStorage
- SQL Server(MSSQLSERVER)无法启动问题解决