处理属性的特殊方法


__getattr__(self, name)

  仅当获取指定的属性失败,搜索过实例、类和超类之后调用。

__getattribute__(self, name)

  尝试获取指定的属性时总会调用这个方法,不过寻找的属性是特殊属性或特殊方法除外。点号、getattr和hasattr内置函数会触发这个方法。调用__getattribute__方法且抛出AttributeError异常时,才会调用__getattr__方法。为了在获取实例属性的时候不导致无限递归,__getattribute__方法的实现要使用super().__getattribute__方法。