zoukankan      html  css  js  c++  java
  • 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系列方法对应的是([])
  • 相关阅读:
    mysql 注意事项 PreparedStatement 对比 statement
    Dbutils commons-dbutils-1.3
    C3P0 mysql 5.7
    servlet-应用mysql-1
    javabean 用integer 而不是int
    servlet-1
    servlet 路径 编码 问题
    mac tomcat 9.0
    case end 的用法
    自定义抛出异常
  • 原文地址:https://www.cnblogs.com/zach0812/p/11310348.html
Copyright © 2011-2022 走看看