版权声明:本文为博主原创文章,欢迎转载,请注明出处 https://blog.csdn.net/mouday/article/details/89090347
访问类属性的顺序:
getattribute
-> 如果没有找到属性,则引发异常AttributeError
-> AttributeError 异常会触发 getattr,如果没有实现getattr 则抛出异常
代码示例
# -*- coding: utf-8 -*-
class Dog(object):
def __getattribute__(self, item):
print("getattribute: {}".format(item))
return super(Dog, self).__getattribute__(item)
def __getattr__(self, item):
print("getattr: {}".format(item))
return self.default
def eat(self):
print("eat")
def default(self):
print("default")
def main():
demo = Dog()
demo.eat()
demo.sleep() # AttributeError
if __name__ == '__main__':
main()
"""
getattribute: eat
eat
getattribute: sleep
getattr: sleep
getattribute: default
default
"""
1、Dog
类实现了eat
方法, 调用的时候经过getattribute
能够获取eat
则直接返回
2、Dog
类没有实现sleep
方法, 调用的时候 getattribute
没有获取该方法,则进入getattr
,此方法中默认返回default
方法
可以理解为 getattr
捕获了 getattribute
抛出的 AttributeError
异常,对其进行了异常处理