zoukankan      html  css  js  c++  java
  • day30 item系列

    item 会将数据操作类似于字典的操作
    具体用到的方法
    __getitem__(self, item):
    __setitem__(self, key, value):
    __delitem__(self, key):
    __delattr__(self, item):
    ps: 这些方法外部都是无法调用的

    内部原理:
     1 class Foo:
     2     def __init__(self,name,age,sex):    # 初始化方法,构造方法
     3         self.name = name
     4         self.age = age
     5         self.sex = sex
     6 
     7     def __getitem__(self, item):
     8         if hasattr(self,item):
     9             return self.__dict__[item]
    10 
    11     def __setitem__(self, key, value):
    12         self.__dict__[key] = value
    13 
    14     def __delitem__(self, key):
    15         del self.__dict__[key]
    16 
    17     def __delattr__(self, item):    # 本身就已经实现了,object类原生支持,其他则需要自己实现
    18         del self.__dict__[item]        # 原生就是 f.的方式删除
    19 
    20 
    21 f = Foo("suyang",2,"SB")
    22 print(f["name"])
    23 
    24 f["hobby"] = "egg"
    25 print(f["hobby"])
    26 
    27 del f["hobby"]
    28 print(f.__dict__)

    正常操作的表象:
     1 class Foo():
     2     def __init__(self,name,age):
     3         self.name = name
     4         self.age = age
     5 
     6 a = Foo("yangtuo",18)    # 本质上内部执行了 __init__ 方法
     7 print(a.__dict__)        # {'name': 'yangtuo', 'age': 18}
     8 a.hobby = "play"         # 本质内部执行的是 __setitem__
     9 print(a.hobby)           # 本质上是内部执行了 __getitem__
    10 del a.hobby              # 本质上内部执行了 __delattr__ 
    11 print(a.hobby)           # AttributeError: 'Foo' object has no attribute 'hobby'
  • 相关阅读:
    gcc和g++的区别和联系
    Linux基础命令第二天
    Linux基础命令第一天
    Flask入门之完整项目搭建
    Flask入门第三天
    Flask入门第二天
    Flask入门第一天
    vue_drf之多级过滤、排序、分页
    vue_drf之视频接口
    vue_drf之支付宝接口
  • 原文地址:https://www.cnblogs.com/shijieli/p/9938623.html
Copyright © 2011-2022 走看看