item类方法可以实现像操作字典一样操作实例的属性
class Foo:
def __init__(self,name):
self.name=name
def __getitem__(self, item):
print(self.__dict__[item])
def __setitem__(self, key, value):
self.__dict__[key]=value
def __delitem__(self, key):
print('del obj[key]时,我执行')
self.__dict__.pop(key)
def __delattr__(self, item):
print('del obj.key时,我执行')
self.__dict__.pop(item)
f1=Foo('sb')
print('111-->',f1.__dict__) # 111--> {'name': 'sb'}
f1['age']=18
print('222-->',f1.__dict__) # 222--> {'age': 18, 'name': 'sb'}
f1['age1']=19
print('333-->',f1.__dict__) # 333--> {'age1': 19, 'age': 18, 'name': 'sb'}
del f1.age1 # del obj.key时,我执行
print('444-->',f1.__dict__) # 444--> {'age': 18, 'name': 'sb'}
del f1['age'] # del obj[key]时,我执行
print('555-->',f1.__dict__) # 555--> {'name': 'sb'}
f1['name']='alex'
print('666-->',f1.__dict__) # {'name': 'alex'}
结果:
111--> {'name': 'sb'}
222--> {'age': 18, 'name': 'sb'}
333--> {'age1': 19, 'age': 18, 'name': 'sb'}
del obj.key时,我执行
444--> {'age': 18, 'name': 'sb'}
del obj[key]时,我执行
555--> {'name': 'sb'}
666--> {'name': 'alex'}