三.item系列 __getitem__, __setitem__, __delitem__

三.item系列 __getitem__,__setitem__,__delitem__

  • __getitem__ : 通过中括号取值, 触发它的执行

  • __setitem__ : 通过中括号赋值, 触发它的执行

  • __delitem__ : 通过中括号删值, 触发它的执行

class Person:
    def __getitem__(self, item):
        print('取值操作,触发了执行')

    def __setitem__(self, key, value):
        print('赋值操作,触发了执行')

    def __delitem__(self, key):
        print('删值操作,触发了执行')

p=Person()
p['name'] = "派小星"  # 赋值操作,触发了执行
p['name']            # 取值操作,触发了执行
del p["name"]        # 删值操作,触发了执行
  • 小示例 : 在不继承字典类的情况下, 自定义一个字典, 支持 [ ] 取值赋值
class Mydict:
    def __init__(self,**kwargs):
        # 🔰方案一
        # for key,value in kwargs.items():
        #     setattr(self,key,value)

        # 🔰方案三
        # for key,value in kwargs.items():
        #     self.__dict__[key]=value

        # 🔰方案二
        self.__dict__.update(kwargs)

    def __getitem__(self, item):
        # 🔰方案一
        # return self.__dict__[item]

        # 🔰方案二
        return getattr(self,item)

    def __setitem__(self, key, value):
        # 🔰方案一
        # setattr(self,key,value)

        # 🔰方案二
        self.__dict__[key]=value

    def __delitem__(self, key):
        del self.__dict__[key]

dd = Mydict()
print(dd.__dict__)    # {}

dd["name"] = "shawn"
print(dd.__dict__)    # shawn

print(dd["name"])     # shawn
posted @ 2020-12-30 12:23  给你骨质唱疏松  阅读(210)  评论(0)    收藏  举报