23-2 item系列
item系列 |
和对象使用 ’[ ]‘访问值有联系
getitem ===》obj['wioe']
setitem ===>obj['uyr'] = jash
delitem ===》del obj['asfjh']
下面代码其实就是用到了item的内置方法
obj = {'k':'v'} print(obj) # 字典的对象 print(obj['k'])
在内置的模块中,
有一些特殊的方法,要求对象必须实现__getitem__/__setitem__才能使用
class B: def __getitem__(self, item): return getattr(self, item) def __setitem__(self, key, value): setattr(self, key, value*2) # 相当于 self.key = value*2 def __delitem__(self, key): delattr(self, key)
平常给属性赋值 ,打印结果
b = B() b.k2 = 'v2' print(b.k2) # v2
用item系列添加属性
b = B() b['k1'] = 'v1' # 调用__setitem__ 返回value*2 print(b['k1']) # 调用__getitem__ 获取value
del b['k1'] # 调用__delitem__ print(b['k1']) # 找不到了,报错
传入一个列表
class B: def __init__(self,lst): self.lst = lst def __getitem__(self, item): return self.lst[item] def __setitem__(self, key, value): self.lst[key] = value def __delitem__(self, key): self.lst.pop(key)
b = B(['111','222','ccc','ddd']) print(b.lst[0]) #111 print(b[0]) # getitem方法设置,即可使用此方法获值 111 b[3] = 'alex' # setitem print(b.lst) # ['111', '222', 'ccc', 'alex'] del b[2] print(b.lst) # ['111', '222', 'alex']