__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