Python编程:getattribute和getattr访问对象属性顺序
【摘要】 访问类属性的顺序:
getattribute
-> 如果没有找到属性,则引发异常AttributeError
-> AttributeError 异常会触发 getattr,如果没有实现getattr 则抛出异常
123
代码示例
# -*- coding: utf-8 -*-
class Dog(object): def __getattrib...
访问类属性的顺序:
getattribute
-> 如果没有找到属性,则引发异常AttributeError
-> AttributeError 异常会触发 getattr,如果没有实现getattr 则抛出异常
- 1
- 2
- 3
代码示例
# -*- 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
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
1、Dog
类实现了eat
方法, 调用的时候经过getattribute
能够获取eat
则直接返回
2、Dog
类没有实现sleep
方法, 调用的时候 getattribute
没有获取该方法,则进入getattr
,此方法中默认返回default
方法
可以理解为 getattr
捕获了 getattribute
抛出的 AttributeError
异常,对其进行了异常处理
文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。
原文链接:pengshiyu.blog.csdn.net/article/details/89090347
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)