item系列

#__setitem__赋值方法,在进行obj[name]=value时,会触发执行该方法
#__delitem__删除方法,在进行del obj[name],就会触发执行该方法
#__getitem__查询方法,在进行读取obj[name]的值时,就会触发执行该方法
#把对象操作属性模拟成字典的格式
#item系列与attr系列都是方法,都是在定义阶段,而反射是内置函数,是在使用阶段
#item系列是在对象进行字典形式的操作时,在会执行相应方法,而attr系列是不同的,
class Foo:
def __init__(self,name):#2 不能有返回值
self.name =name #把实例化对象给self,name值赋给self.name,
# 即实例化对象的name属性中,3

def __getitem__(self, item): #34
return self.__dict__[item]

def __setitem__(self, key, value): #23
self.__dict__[key] =value
def __delitem__(self, key): #56
self.__dict__.pop(key)

def __str__(self): #必须有返回值,且返回值是str型 45
return str(self.__dict__)

f =Foo('egon') #执行Foo(),触发__init__(如果有),就要进行传值,然后执行__init__中的
#代码,1,当__init__执行完了,就在f空间字典中产生name属性(变量)
f['age']=18 #遇到obj[name]=value形式,就会自动触发__setitem__方法 ,22
print(f['name']) #遇到obj[name]形式,就会自动触发__getitem__方法,当该方法执行完了,
#才执行打印,33
print(f) #打印对象f,就会触发__str__方法,当执行完__str__,才会执行打印 44
#delattr(f,'age')
del f['age'] #遇到del obj[name]形式,就会自动触发__delitem__方法,55
print(f)
posted @ 2017-04-25 20:13  study_python  阅读(272)  评论(0编辑  收藏  举报