python 获取xml节点属性_getattr在python中获取不存在属性出错

2e5e0bc7083abe4085700d1f55212254.png

在使用函数时,难免有要用到函数对象这方面的模块。这里有的小伙伴使用了getattr()进行了不存在属性的获取,报错后找不到原因。经和小编的一番找寻,发现了出错点,这也是我们在使用getattr函数时需要注意的事项。接下来我们就getattr在python中获取不存在属性出错 的原因进行寻找。

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

例子如下:

class A():

    a = 5

    def __init__(self, x):

        self.x = x

  

    def hello(self):

        return 'hello func'

  

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

hello func

5

2.getattr()可以用来获取对象的属性和方法,需要注意的是,如果通过getattr()来尝试获取对象里并不存在的属性时没有添加第三个默认值,代码会报错

如下所示:

print(getattr(a, 'y'))

运行会报异常提示找不到属于y:

Traceback (most recent call last):

  File "app/test.py", line 32, in <module>

    print(getattr(a, 'y'))

AttributeError: 'A' object has no attribute 'y'

区别__getattr__()函数是特殊函数

它仅当属性不能在实例的__dict__或它的类,或者祖先类中找到时,才被调用。

程序员主要用__getattr__()来实现类的灵活性,或者用它来做一些兜底的操作。

绝大多数情况下,你需要的是__getattr__()

通过一系列的代码分析,我们可以看出是没有添加默认值才导致getattr的报错。另外getattr函数和__getattr__()函数时有所区别的,这点再次提醒大家。

原文至:

getattr在python中获取不存在属性出错-Python学习网​www.py.cn
975d1e4f7b7c8666a3615cec631e3201.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值