您的位置 首页 > 腾讯云社区

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

前言

当实例对象调用一个不存在的属性时,系统通常会报错,那有啥办法避免这种现象么,或者说自定义报错信息,答案是肯定的,我们可以通过定义__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异常,属性查找失败!

---来自腾讯云社区的---cctester

关于作者: 瞎采新闻

这里可以显示个人介绍!这里可以显示个人介绍!

热门文章

留言与评论(共有 0 条评论)
   
验证码: