__getitem__,__setitem__,__delitem__

python网站地址:https://docs.python.org/zh-cn/3/reference/datamodel.html#object.getitem
属于Pytohon中的特殊方法,如下地址有详细的介绍:https://www.cnblogs.com/hotbaby/p/4913363.html

object.getitem(self, key)

调用此方法以实现 self[key] 的求值。对于序列类型,接受的键应为整数和切片对象。请注意负数索引(如果类想要模拟序列类型)的特殊解读是取决于 getitem() 方法。如果 key 的类型不正确则会引发 TypeError 异常;如果为序列索引集范围以外的值(在进行任何负数索引的特殊解读之后)则应引发 IndexError 异常。对于映射类型,如果 key 找不到(不在容器中)则应引发 KeyError 异常。

注解 for 循环在有不合法索引时会期待捕获 IndexError 以便正确地检测到序列的结束。

以下是两个有关__getitem__的例子
class Getitem_test():
    def __init__(self,data):
        self.data=data
    def __getitem__(self, item):
        print("index",item)
        return self.data[item]
X=Getitem_test('nice')
print('X的type:',type(X))
print('X.data的type:',type(X.data))
print('...............')
print('X[0]:',X[0])#在读取X[0]时是调用的getitem
print('...............')
for item in X:
    print(type(item),'item:',item)


运行的结果如下:
X的type<class '__main__.Getitem_test'>
X.data的type<class 'str'>
...............
index 0
X[0]: n
...............
index 0
<class 'str'> item: n
index 1
<class 'str'> item: i
index 2
<class 'str'> item: c
index 3
<class 'str'> item: e
index 4
class Getitem_test():
    def __init__(self,data):
        self.data=data
    def __getitem__(self, item):
        print("index",item)
        # return self.data[item]
        return 'hello'#在这里只是return了一个字符串,没有用到item,虽然item还是会从0开始逐渐增加,但是在for item in X中,item一直是‘hello’,也就不会停止了。也就是说每次都会调用getitem。
X=Getitem_test('nice')
print('X的type:',type(X))
print('X.data的type:',type(X.data))
print('...............')
print('X[0]:',X[0])
print('...............')
for item in X:
    print(type(item),'item:',item)


运行结果(会一直循环下去):
X的type<class '__main__.Getitem_test'>
X.data的type<class 'str'>
...............
index 0
X[0]: hello
...............
index 0
<class 'str'> item: hello
index 1
<class 'str'> item: hello
index 2
<class 'str'> item: hello
index 3
<class 'str'> item: hello
index 4
<class 'str'> item: hello

object.setitem(self, key, value)

调用此方法以实现向 self[key] 赋值。注意事项与 getitem() 相同。为对象实现此方法应该仅限于需要映射允许基于键修改值或添加键,或是序列允许元素被替换时。不正确的 key 值所引发的异常应与 getitem() 方法的情况相同。

object.delitem(self, key)

调用此方法以实现 self[key] 的删除。注意事项与 getitem() 相同。为对象实现此方法应该权限于需要映射允许移除键,或是序列允许移除元素时。不正确的 key 值所引发的异常应与 getitem() 方法的情况相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值