__getattr__ :
如果某个类定义了__getattr__方法,同时系统在该类对象的实例字典中又找不到待查询的属性时,系统会自动调用__getattr__方法。
__getattribute__ :
程序每次访问对象的属性时,Python系统都会调用这个特殊的方法,即使属性字典里面已经有了该属性,也依然会触发__getattribute__方法。
__setattr__ :
设置类实例属性 如obj.key = 'tom',自调用__setattr__
__getitem__:
使用[]获取实例属性 如obj[key],自调用__getitem__; obj[key]的背后就是__getitem__方法,为了能求得obj[key]的值,解释器实际上会调用obj.__getitem__(key).
__setitem__:
使用[]设置实例属性如 obj['key'] = 'tom' ,自调用__setitem__
示例:
class Student(object): def __getattr__(self, item): return item + " is not exists" def __setattr__(self, key, value): self.__dict__[key] = value def __getitem__(self, item): return self.__dict__[item] def __setitem__(self, key, value): self.__dict__[key] = value if __name__ == '__main__': stu = Student() print(stu.name) # 调用__getattr__方法 stu.age = 22 # 调用__set__attr方法 print(stu["age"]) # 调用__getitem__方法 stu["name"] = "tom" # 调用__setitem__方法 print(stu["name"]) # 调用__getitem__方法 # >>执行结果 # name is not exists # 22 # tom