【1.126】类的内置函数setitem getitem delitem

内置函数__setitem__   __getitem__  __delitem__   是对字典方式访问 

如: f1["key"] 

 

内置函数__setattr__   __getattr__  __delattr__   是对 . 的方式访问 

如: f1.key

 

class Foo:
    def __init__(self,name):
        self.name = name
    def __setitem__(self, key, value):
        print("执行setitem")
        self.__dict__[key]=value
    def __getitem__(self, item):
        print("执行getitem")
        print(self.__dict__[item])
        #也可以直接 return
        # return self.__dict__[item]
    def __delitem__(self, key):
        print("执行delitem")
        del self.__dict__[key]
     #可以 这样写
        # sel.__dict__.pop(key)
        # 但是不能  
        #del self[key] 这样就递归循环了
     # 在delattr 里面 也不能写
     #del self.key 也会递归循环 但是在delitem 中这样写它会说找不到这个key
    

f1
= Foo("alex") print (f1.__dict__) #{'name': 'alex'} f1.age = 18 print (f1.__dict__) # {'name': 'alex', 'age': 18} f1["gender"] ="male" print (f1.__dict__) # 执行setitem # {'name': 'alex', 'age': 18, 'gender': 'male'} f1["age"] # 执行getitem # 18 del f1["gender"] print (f1.__dict__) # 执行delitem # {'name': 'alex', 'age': 18}

 

posted @ 2016-06-21 15:19  科学小怪癖  阅读(121)  评论(0)    收藏  举报