Python类中方法getitem和getattr详解
1、getitem方法
使用这个方法最大的印象就是调用对象的属性可以像字典取值一样使用中括号['key']
使用中括号对对象中的属性进行取值、赋值或者删除时,会自动触发对应的__getitem__、__setitem__、__delitem__方法
代码如下:
classFoo(object): def__init__(self): self.name='jack' def__getitem__(self,item): ifiteminself.__dict__:#item=key,判断该key是否存在对象的__dict__里, returnself.__dict__[item]#返回该对象__dict__里key对应的value def__setitem__(self,key,value): self.__dict__[key]=value#在对象__dict__为指定的key设置value def__delitem__(self,key): delself.__dict__[key]#在对象__dict__里删除指定的key f1=Foo() print(f1['name'])#jack f1['age']=10 print(f1['age'])#10 delf1['name'] print(f1.__dict__)#{'age':10}
2、getattr方法
使用对象取值、赋值或者删除时,会默认的调用对应的__getattr__、__setattr__、__delattr__方法。
对象取值时,取值的顺序为:先从object里__getattribute__中找,第二步从对象的属性中找,第三步从当前类中找,第四步从父类中找,第五步从__getattr__中找,如果没有,直接抛出异常。
代码如下:
classFoo(object): def__init__(self): self.name='jack' def__getattr__(self,item): ifiteminself.__dict__: returnself.__dict__[item] def__setattr__(self,key,value): self.__dict__[key]=value def__delattr__(self,item): delself.__dict__[item] c1=Foo() print(c1.name)#jack c1.age=18 print(c1.age)#18 delc1.age#删除对象c1的age print(c1.age)#None
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。