所谓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: #Dict
def __init__(self,name,age):
self.name=name
self.age = age
def __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]=value
def __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.name
del obj['name']
#
# print(obj.__dict__)