对象不支持getattribute属性或方法,

  对象不支持getattribute属性或方法,

  使用函数时,不可避免的会有使用函数对象的模块。这里有朋友用getattr()获取不存在的属性,报错后也找不到原因。用边肖搜索后,发现了错误点,这是我们在使用getattr函数时要注意的。接下来,我们来寻找getattr在python中获取不存在的属性时出错的原因。

  1.getattr()是python内置的一个函数,它可以用来获取对象的属性和方法

  例:如下

  classA():

  a=5

  def__init__(self,x):

  self.x=x

  defhello(self):

  返回“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

  39;))#相当于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__()函数时有所区别的,这点再次提醒大家。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

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