前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 魔法方法之__getattr__(self,name)

Python 魔法方法之__getattr__(self,name)

作者头像
周辰晨
发布2020-03-31 12:15:10
1.4K0
发布2020-03-31 12:15:10
举报

前言

当实例对象调用一个不存在的属性时,系统通常会报错,那有啥办法避免这种现象么,或者说自定义报错信息,答案是肯定的,我们可以通过定义__getattr__(self,name)魔法方法来实现。

__getattr__(self, name)

__getattr__(self,name) 定义当用户获取一个不存在的属性时的行为。 当实例对象调用不存在的属性时,如果在类中没重载__getattr__(self,name)方法,则会抛出AttributeError异常,如下所示:

>>> class Animal():
...     pass
...
>>> dog = Animal()
>>> dog.a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Animal' object has no attribute 'a'

而当我们重载了__getattr__(self,name)方法,一旦属性查找失败,就会调用__getattr__(self,name)方法:

>>> class Animal():
...     def __getattr__(self,name):
...             print('no %s' % name)
...
>>> dog = Animal()
>>> dog.aa
no aa

如上所示,当我们的实例对象访问不存在的属性aa时,就自动调用了__getattr__(self, name)方法,返回方法内自定义的信息。

这边也来说下调用__getattr__的详细过程:

1.在对象的实例属性中寻找,找不到执行下一步2.在的类中查找类属性,找不到执行下一步3.在对象的继承链上寻找,找不到执行下一步4.调用__getattr__ 方法,如果用户没有定义或者还是找不到,抛出AttributeError异常,属性查找失败!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师影响力 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • __getattr__(self, name)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档