• 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']
  • 相关阅读:
    day02_07 创建新目录
    day02_04 字典
    day02_02 列表切割
    day03_01 文件操作
    MS的TREE 控件使用
    使用自定义用户控件的一些经验
    Asp.net开发心得点滴[动态加载的用户控件使用事件委托,交给页面处理的事件无效问题]
    正则表达式基础学习[1]
    自定义控件无法在VS.net编辑中显示
    错误的递归
  • 原文地址:https://www.cnblogs.com/zhuangdd/p/12637619.html
Copyright © 2020-2023  润新知