Python类,特殊方法, __getitem__,__len__, __delitem__
2014-09-19 18:29
911 查看
参考资料
特殊函数一般以__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
特殊函数一般以__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类,特殊方法, __getitem__,__len__, __delitem__
- python四个魔法方法__len__,__getitem__,__setitem__,__delitem__
- 详解Python魔术方法__getitem__、__setitem__、__delitem__、__len__
- python 魔术方法:__getitem__、__setitem__、__delitem__、__len__
- python 魔法方法之:__getitem__ __setitem__ __delitem__ __len__
- Python类的__getitem__和__setitem__特殊方法
- Python类的__getitem__和__setitem__特殊方法
- Python的魔法函数之 - __len__,__getitem__,__setitem__,__delitem__
- python 魔法方法之:__getitem__ __setitem__ __delitem__
- 浅谈Python类的__getitem__和__setitem__特殊方法
- Python类的__getitem__和__setitem__特殊方法
- Python中的__getitem__和__setitem__特殊方法
- 用python 实现链表(实现__getitem__,__set__,__len__ 魔法方法)
- Python类的__getitem__和__setitem__特殊方法
- python基础===成员访问__len__()和__getitem__()
- Python中字典的增、删、创建、索引与字典方法clear,copy,formkeys,get,has_key,popitem,update
- python中__getitem__, __setitem__, __delitem__的使用
- python中__getitem__, __setitem__, __delitem__的使用
- Python 使用__getitem__ __setitem__ __delitem__ 创建自己的映射类型
- 解析Python中的__getitem__专有方法