• 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']
  • 相关阅读:
    3.List.Set
    2.Collection.泛型
    1.Object类.常用API
    MySQL-核心技术
    奇异的家族-动态规划
    动态规划-等和的分隔子集
    跳跃游戏-贪心
    跳跃游戏2
    爬楼梯
    组合博弈1536-S-Nim
  • 原文地址:https://www.cnblogs.com/zhuangdd/p/12637619.html
Copyright © 2020-2023  润新知