python get_len_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 "", line 1, in
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 "", line 1, in
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 "", line 1, in
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 "", line 1, in
TypeError: object of type 'Something' has no len()
增加__len__方法,簡單返回1
>>> Something.__len__ = lambda self : 1
>>> len(s)
1
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python get_len_Python类,特殊方法, __getitem__,__len__, __delitem__的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java与C++有何区别呢?请看以下几点
- 下一篇: java程序员应该掌握的技术才算得上熟练