Python编程:getattribute和getattr访问对象属性顺序
  TEZNKK3IfmPf 2023年11月15日 23 0

访问类属性的顺序:

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 异常,对其进行了异常处理

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   39   0   0 python开发语言
  TEZNKK3IfmPf   2024年05月31日   28   0   0 python
  TEZNKK3IfmPf   2024年05月31日   35   0   0 excelpython
  TEZNKK3IfmPf   2024年05月31日   31   0   0 python
TEZNKK3IfmPf