和上一篇文档一样,字典也是对象,所以通过类的内置方法也能使对象实现字典一样的键值对索引效果,这里需要实现三个内置方法:__setitem__();__getitem__();__delitem__()。
首先创建一个类,并且完善__setitem__();__getitem__();__delitem__()三个内置方法。
class Cat:
def __setitem__(self, key, value):
print('设置键值对', key, value)
def __getitem__(self, item):
print('获取键值对', item)
def __delitem__(self, key):
print('删除键值对', key)
c = Cat()
c['age'] = 19 # 设置一组键值对,相当于一个属性和值
print(c['age']) # 获取键age对应的值,但是得到的是None,原因是上面的setitem函数没有存储设置的键值对
del c['age']
返回结果:
设置键值对 age 19
获取键值对 age
None
删除键值对 age
从上面的代码和返回结果中我们可以看出来,通过增加对象属性之后,类中的三个方法会把随想属性名作为键,值作为对应的值,组成字典。然后我们就可以对其像字典一样进行增删改查了。
要想实现和字典一样的效果,能完整的吧对象属性名和值存储到字典中,还要实现一个初始化属性。
class Cat:
def __init__(self):
self.dict = {}
def __setitem__(self, key, value):
# print('设置键值对', key, value)
self.dict[key] = value
def __getitem__(self, item):
# print('获取键值对', item)
return self.dict[item]
def __delitem__(self, key):
# print('删除键值对', key)
del self.dict[key]
c = Cat()
c['age'] = 22
print(c.dict) # {'age': 22}
print(c['age'])
del c['age']
print(c.dict) # {}
返回结果:
{'age': 22}
22
{}