0
点赞
收藏
分享

微信扫一扫

Python编程:getattribute和getattr访问对象属性顺序


访问类属性的顺序:

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


参考:
​​Python getattribute vs getattr 浅谈​​




举报

相关推荐

0 条评论