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']

 

posted @ 2020-04-05 16:03  蜗牛般庄  阅读(201)  评论(0编辑  收藏  举报
Title
页脚 HTML 代码