在使用函数时,难免有要用到函数对象这方面的模块。这里有的小伙伴使用了getattr()进行了不存在属性的获取,报错后找不到原因。经和小编的一番找寻,发现了出错点,这也是我们在使用getattr函数时需要注意的事项。接下来我们就getattr在python中获取不存在属性出错 的原因进行寻找。
1.getattr()是python内置的一个函数,它可以用来获取对象的属性和方法
例子如下:
classA(): a=5 def__init__(self,x): self.x=x defhello(self): return'hellofunc' a=A(10) print(getattr(a,'x'))#相当于a.x print(getattr(a,'y',20))#相当于a.y,因为a.y并不存在,所以返回第三个参数作为默认值 print(getattr(a,'hello')())#相当于a.hello() print(getattr(A,'a'))#相当于A.a
这段代码的输出结果是:
10 20 hellofunc 5
2.getattr()可以用来获取对象的属性和方法,需要注意的是,如果通过getattr()来尝试获取对象里并不存在的属性时没有添加第三个默认值,代码会报错
如下所示:
print(getattr(a,'y'))
运行会报异常提示找不到属于y:
Traceback(mostrecentcalllast): File"app/test.py",line32,in<module> print(getattr(a,'y')) AttributeError:'A'objecthasnoattribute'y'
区别__getattr__()函数是特殊函数
它仅当属性不能在实例的__dict__或它的类,或者祖先类中找到时,才被调用。
程序员主要用__getattr__()来实现类的灵活性,或者用它来做一些兜底的操作。
绝大多数情况下,你需要的是__getattr__()
通过一系列的代码分析,我们可以看出是没有添加默认值才导致getattr的报错。另外getattr函数和__getattr__()函数时有所区别的,这点再次提醒大家。