[]拦截方法的意思就是通过"对象['属性或方法名']"这样的形式去访问和设置对象的属性或方法;
class Person:
def __init__(self,name):
self.name = name
p1 = Person('vincent')
# p1['name'] = 'xiaoming' #TypeError: 'Person' object does not support item assignment
print(p1['name']) #TypeError: 'Person' object is not subscriptable
从上面的例子中可以看出,通常的对象是无法通过"对象['属性或方法名']"这样的形式去访问和设置对象的属性或方法;
class Person:
def __init__(self,name):
self.name = name
def __getitem__(self, item):
return getattr(self,item)
def __setitem__(self, key, value):
setattr(self,key,value)
p1 = Person('vincent')
p1['name'] = 'xiaoming'
p1['age'] = 18
print(p1['name'],p1['age']) #xiaoming 18
通过重写__getitem__和__setitem__对象,成功实现了通过"对象['属性或方法名']"这样的形式去访问和设置对象的属性或方法。