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