Python3基础-item系列

"""
__xxxitem__:使用 [''] 的方式操作属性时被调用
__setitem__:每当属性被赋值的时候都会调用该方法,因此不能再该方法内赋值 self.name = value 会死循环
__getitem__:当访问不存在的属性时会调用该方法
__delitem__:当删除属性时调用该方法

"""
class People:
    def __init__(self,name):
        self.name =name
        self['age'] = 17
        self['height'] = '1米6'
        del self['height']

    def __getitem__(self, item):
        '''
        当访问不存在的属性时会调用该方法
        '''
        print('__getitem__',item)

    def __setitem__(self, key, value):
        '''
        每当属性被赋值的时候都会调用该方法,因此不能再该方法内赋值 self.name = value 会死循环
        '''
        print('__setitem__  key=%s,value=%s'%(key,value))


    def __delitem__(self, key):
        '''
         当删除属性时调用该方法
        '''
        print('__delitem__',key)
        #return self.__dict__[key]

p1 = People('小苏')
print(p1.name)
p1.weight=80
print(p1.__dict__)
p1['blood_type'] ='O型'
print(p1.__dict__)
del p1.name  #删除name属性,但是没有触发__delitem__函数
print(p1.__dict__)
del p1['weight']  #删除weight属性,触发__delitem__函数
print(p1.__dict__)
print(p1['age']) #获取不存在的age属性,就会触发__getitem__函数

以上代码执行结果如下:

__setitem__  key=age,value=17
__setitem__  key=height,value=1米6
__delitem__ height
小苏
{'name': '小苏', 'weight': 80}
__setitem__  key=blood_type,value=O型
{'name': '小苏', 'weight': 80}
{'weight': 80}
__delitem__ weight
{'weight': 80}
__getitem__ age
None
class People:
    def __init__(self,name):
        self.name =name
        self['age'] = 17
        self['height'] = '1米6'
        del self['height']

    def __getitem__(self, item):
        '''
        当访问不存在的属性时会调用该方法
        '''
        print('__getitem__',item)

    def __setitem__(self, key, value):
        '''
        每当属性被赋值的时候都会调用该方法,因此不能再该方法内赋值 self.name = value 会死循环
        '''
        print('__setitem__  key=%s,value=%s'%(key,value))
        self.__dict__[key] = value


    def __delitem__(self, key):
        '''
         当删除属性时调用该方法
        '''
        print('__delitem__',key)
        self.__dict__.pop(key)

p1 = People('小苏')
print(p1.name)
p1.weight=80
print(p1.__dict__)
p1['blood_type'] ='O型'
print(p1.__dict__)
del p1.name  #删除name属性,但是没有触发__delitem__函数
print(p1.__dict__)
del p1['weight']  #删除weight属性,触发__delitem__函数
print(p1.__dict__)
print(p1['age']) #获取不存在的age属性,就会触发__getitem__函数

以上代码执行结果如下:

__setitem__  key=age,value=17
__setitem__  key=height,value=1米6
__delitem__ height
小苏
{'name': '小苏', 'age': 17, 'weight': 80}
__setitem__  key=blood_type,value=O型
{'name': '小苏', 'age': 17, 'weight': 80, 'blood_type': 'O型'}
{'age': 17, 'weight': 80, 'blood_type': 'O型'}
__delitem__ weight
{'age': 17, 'blood_type': 'O型'}
__getitem__ age
None

 

 

 

 

 

posted @ 2019-11-20 14:07  槑槑DE  阅读(470)  评论(0编辑  收藏  举报