所谓Attr系列,其实是setattr,delattr,getattr 三个函数,从名字中可以看出来这是一套设置,删除,查询的函数,那我们来一个一个的看:

setitem(self,key,value):当对类中的某个属性进行"赋值"时触发的函数(只有使用字典赋值的方式时才会触发此方法的执行)

与Attr系列的区分:setattr(self):是在对象打点儿的方式赋值时,才会触发的方法

代码示例:

class Foo:def __setitem__(self, key, value):print(key,"获得",value)f = Foo()f["name"] = "egon"

delitem(self,key):当类中的某个属性被删除时,触发此方法(只有使用del字典方式删除属性时,才会触发此方法)

与Attr系列的区分:delattr(self):使用del类打点儿属性的方式删除属性,才会触发此方法

代码示例:

class Foo: name = "egon" def __delitem__(self, key): print(key,"已被删除") f = Foo() del f["name"]__getitem__(self,item):当调用类中的属性或方法时触发此方法的执行(只在使用类[key]字典的方式调用时,才会触发此方法)

与Attr系列的区分:其实这里已经很明显了,getattr(self):是类打点儿调用且命名空间没有发现名字的情况下,触发此方法

代码示例:

class Foo: name = "egon" def __getitem__(self, item): print(item,"已被调用") f = Foo() f["name"]

综合代码实例

#item系列class Foo: #Dictdef __init__(self,name,age):self.name=nameself.age = agedef __getitem__(self, item): #item='namexxx'print('getitem...')return self.__dict__.get(item)def __setitem__(self, key, value):print('setitem...')print(key,value)self.__dict__[key]=valuedef __delitem__(self, key):print('delitem...')print(key)del self.__dict__[key]obj=Foo('alex',11)print(obj.__dict__)#查看属性:# obj.属性名# print(obj['namexxx']) #obj.name#设置属性:obj.sex='male'obj['sex']='male'# print(obj.__dict__)# print(obj.sex)#删除属性del obj.namedel obj['name']## print(obj.__dict__)

(苏州铁艺楼梯)