• item 系列保留方法使用


    前面说过attr系列方法

     1 '''
     2     item 系列方法:
     3     __setitem__ ,__getitem__ ,__delitem__
     4 
     5 '''
     6 
     7 class DemoClass:
     8     def __setitem__(self, key, value):
     9         self.__dict__[key] = value
    10         print("setitem")
    11 
    12     def __delitem__(self, key):
    13         print("delitem")
    14 
    15     def __getitem__(self, item):
    16         print("getitem")
    17 
    18 
    19 if __name__ == "__main__":
    20     demo = DemoClass()
    21     print(demo.__dict__)
    22     demo.name = "tom" # 不会调用 __setitem__
    23     print(demo.__dict__)
    24 
    25     del demo.name  #删除时不调用 __delitem__
    26     print(demo.__dict__)
    27 
    28     #print(demo.age) #获取不存在的属性也不触发__getitem__
    29     '''
    30     输出:
    31         {}
    32         {'name': 'tom'}
    33         {}
    34     '''

    上面调用属性都是用的点,下面换种方式看看:

     1 class DemoClass:
     2     def __setitem__(self, key, value):
     3         self.__dict__[key] = value
     4         print("setitem")
     5 
     6     def __delitem__(self, key):
     7         print("delitem")
     8 
     9     def __getitem__(self, item):
    10         print("getitem")
    11 
    12 
    13 if __name__ == "__main__":
    14     demo = DemoClass()
    15     print(demo.__dict__)
    16     demo['name'] = "tom" # 会调用 __setitem__
    17     print(demo.__dict__)
    18 
    19     del demo['name']  #删除时调用 __delitem__
    20     print(demo.__dict__)
    21 
    22     demo['age'] #获取不存在的属性 触发__getitem__
    23     '''
    24     输出:
    25         {}
    26         setitem
    27         {'name': 'tom'}
    28         delitem
    29         {'name': 'tom'}
    30         getitem
    31     '''
        这就正常了,说明对于 attr系列方法对应的是点(.) 对于item系列方法对应的是([])
  • 相关阅读:
    7.6 C程序的存储空间布局
    7.10 setjmp和longjmp函数
    7.2 main函数
    7.8 存储器分配
    7.5 环境表
    7.1 进程环境 引言
    7.4 命令行参数
    7.3 进程终止
    电影名扬四海主题歌节奏强动感十足的经典歌曲!
    随便写点人生感悟
  • 原文地址:https://www.cnblogs.com/zach0812/p/11310348.html
Copyright © 2020-2023  润新知