Python类,特殊方法, __getitem__,__len__, __delitem__
特殊函数一般以__methodname__的形式命名,如:__init__(构造方法), __getitem__、 __setitem__(subscriptable所需method), __delitem__(del obj[key]所需method), __len__(len(…)所需method)等;
以下以什么都不做的Something类,结合lambda表达式,来说明这些特殊函数;
>>> class Something:
... pass
...
>>> s = Something()
>>> s['key1']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'Something' object is not subscriptable
与subscriptable相关的函数是 __getitem__、 __setitem__,顾名思义,两者分别用于获取和设置相应的key的值;
Something.__getitem__ = lambda self, key: key
__getitem__简单的返回key;
>>> s['key1']
'key1'
>>> s[1]
1
>>> s[(1,2,3)]
(1, 2, 3)
注意:不可变类,都可以作为key;
>>> s[1] = 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'Something' object does not support item assignment
增加__setitem__方法,简单的打印key-value对;
>>> Something.__setitem__ = lambda self, key, value: print(repr(key) + ":" + repr(value))
>>> s[1] = 33
1:33
>>> s[(1,2,3)] = "333"
(1, 2, 3):'333'
>>> del s[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: __delitem__
增加__delitem__方法,简单打印
>>> Something.__delitem__ = lambda self, key : print(repr(key) + " is deleted")
>>> del s[23]
23 is deleted
>>> len(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'Something' has no len()
增加__len__方法,简单返回1
>>> Something.__len__ = lambda self : 1
>>> len(s)
1
最新文章
- Python+selenium自动化脚本编辑过程中遇到的问题和小技巧
- 微信小程序--火车票查询
- js获取当前坐标
- 获取Android状态栏高度的屡试不爽的方法
- easyui window自动居中(修复了iframe弹窗被遮盖问题)
- HDU - 5187 - zhx&;#39;s contest (高速幂+高速乘)
- bzoj2096
- dplyr 数据操作 常用函数(1)
- NTFS 读写高手进阶 - Windows 格式硬盘 Mac存文件
- 使用Spring实现定时任务
- 基于AOP的iOS用户操作引导框架设计
- pythonのdjango 缓存
- yii去掉自动排序功能
- 卷积转换为矩阵运算中填充数的计算-GEMM
- qhfl-4 注册-登录-认证
- 自学Aruba1.5-Aruba体系结构-Aruba通讯过程
- SAP BW: Replacement Path Variables
- 836. Rectangle Overlap
- Java数据类型、赋值、类型转换、==运算
- 检测Linux服务器端口是否开通
热门文章
- POJ1741 Tree 树分治模板
- 【推导】zoj3981 Balloon Robot
- Problem F: 最大公约数、最小公倍数
- bzoj 2002 LinkCutTree
- 设计模式 -- 桥接模式(Bridge)
- [转]android中listview点击事件失效
- [转]ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同
- Codeforces Round #301 (Div. 2) B. School Marks 构造/贪心
- 利用BusyBox ~私人定制 My LINUX~
- UIColor和 同 CIColor 与 CGColor 之间的联系、转换