Python类,特殊方法, __getitem__,__len__, __delitem__

本文介绍了Python中与子脚标操作相关的特殊方法,包括__getitem__(获取键值),__setitem__(设置键值),__delitem__(删除键)以及__len__(计算长度)。通过一个简单的Something类实例,展示了如何定义这些方法并实现基本的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考资料

   

   

   

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

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值