三.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