特殊函数一般以__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

最新文章

  1. Python+selenium自动化脚本编辑过程中遇到的问题和小技巧
  2. 微信小程序--火车票查询
  3. js获取当前坐标
  4. 获取Android状态栏高度的屡试不爽的方法
  5. easyui window自动居中(修复了iframe弹窗被遮盖问题)
  6. HDU - 5187 - zhx&amp;#39;s contest (高速幂+高速乘)
  7. bzoj2096
  8. dplyr 数据操作 常用函数(1)
  9. NTFS 读写高手进阶 - Windows 格式硬盘 Mac存文件
  10. 使用Spring实现定时任务
  11. 基于AOP的iOS用户操作引导框架设计
  12. pythonのdjango 缓存
  13. yii去掉自动排序功能
  14. 卷积转换为矩阵运算中填充数的计算-GEMM
  15. qhfl-4 注册-登录-认证
  16. 自学Aruba1.5-Aruba体系结构-Aruba通讯过程
  17. SAP BW: Replacement Path Variables
  18. 836. Rectangle Overlap
  19. Java数据类型、赋值、类型转换、==运算
  20. 检测Linux服务器端口是否开通

热门文章

  1. POJ1741 Tree 树分治模板
  2. 【推导】zoj3981 Balloon Robot
  3. Problem F: 最大公约数、最小公倍数
  4. bzoj 2002 LinkCutTree
  5. 设计模式 -- 桥接模式(Bridge)
  6. [转]android中listview点击事件失效
  7. [转]ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同
  8. Codeforces Round #301 (Div. 2) B. School Marks 构造/贪心
  9. 利用BusyBox ~私人定制 My LINUX~
  10. UIColor和 同 CIColor 与 CGColor 之间的联系、转换