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