详细见老师博客:http://www.cnblogs.com/Eva-J/articles/7351812.html#_label9
__getitem__\__setitem__\__delitem__
class Foo: def __init__(self,name,age,sex): self.age=age self.name=name self.sex=sex def __getitem__(self, item): print('执行了__getitem__') if item in self.__dict__.keys(): # return self.item 此处不能这样写,会报错,没有这个属性 return self.__dict__[item] else: print('have no your find') def __setitem__(self,key,value): print('执行了__seritem__') self.__dict__[key]=value def __delitem__(self,key): print('执行了__delitem__') del self.__dict__[key] alex= Foo('alex',18,'male') print(alex['name'])#调用了__getitem__ print(alex.name)#正常的调法 alex.age=20#正常的改法 print(alex.__dict__) alex['age']=200#调用了__setitem__,并且改正了值 print(alex.__dict__) del alex['name']#调用了__delitem__ #此时的del 并不是删除的意思,而是调出了__delitem__ #这个方法而已,所以需要在__delitem__中加入删除的代码 print(alex.__dict__) '''输出结果执行了__getitem__ alex alex {'age': 20, 'sex': 'male', 'name': 'alex'} 执行了__seritem__ {'age': 200, 'sex': 'male', 'name': 'alex'} 执行了__delitem__ {'age': 200, 'sex': 'male', 'name': 'alex'} '''
注意__item__的各个内置函数的调用,
__getitem__的调用方式是:对象[key]
等价的调用方式:对象.属性
__setitem__的调用方式是:对象[key]=value
等价的调用方式:对象 .属性=value
__delitem__的调用方式时:del 对象[key] 只是调用了__delitem__方法而已,并不是真正的删除
等价的调用方式:del 对象.属性
这个方法主要是记住所有的 . 变为[],便可以调此方法了
有一个的函数的调用方式很相似:
记起来了,这个是把方法变为属性的装饰器@property,通过修改达到了和正常属性的调法