class Foo(object):
def __init__(self):
self .data={} #创建一个空字典
def __getitem__(self, key):
print(‘__getitem__‘, key)
return self .data.get(key) #效果等于 self .data[key]
def __setitem__(self, key, value):
print(‘__setitem__‘, key, value)
self .data [key]=value #把实例变成一个字典
def __delitem__(self, key):
print(‘__delitem__‘, key)
del self .data [key]
obj = Foo() #创建一个实例obj
obj[‘name‘]=‘JC‘ #设置后就可以像字典一样赋值,调用了__setitem__函数
obj[‘age‘]=34 #obj调用age时,会自动运行__getitem__
print(obj[‘name‘]) #调用了__getitem__,如果没有设置return的内容,则直接返回None,
# 其实只要没有设置retur,那么不管是name还是其他参数都一样返回NoNe
print(obj .data [‘name‘]) #没有设置__getitem__里面return的内容也会返回字典里面的Valu值
print(obj.data) #打印出obj实例中存的字典{‘name‘: ‘JC‘, ‘age‘: 34}
#del obj[‘sdfsfd‘]#没有设置__delitem__(self, key)下面的内容,其实就是调用了del这个函数
del obj[‘name‘]
print(obj.data) #把‘name‘: ‘JC‘删除了,返回{‘age‘: 34}
#用于封装字典,用户访问里是访问实例对像,而不是访问字典
‘‘‘
未设置__getitem__里面return的内容
__setitem__ name JC
__setitem__ age 34
__getitem__ age
None
JC
{‘name‘: ‘JC‘, ‘age‘: 34}
----------------------------------------
设置__getitem__里面return的内容
__setitem__ name JC
__setitem__ age 34
__getitem__ age
JC
JC
{‘name‘: ‘JC‘, ‘age‘: 34}
‘‘‘
原文:https://www.cnblogs.com/hua264/p/12977740.html