• 技术文章 >Python技术 >Python基础教程

    getattr在python中获取不存在属性出错

    小妮浅浅小妮浅浅2021-01-11 15:16:54原创3825

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

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

    例子如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    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

    这段代码的输出结果是:

    1

    2

    3

    4

    10

    20

    hello func

    5

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

    如下所示:

    1

    print(getattr(a, 'y'))

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

    1

    2

    3

    4

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

    专题推荐:python getattr获取不存在属性出错
    上一篇:python中hash算法是否可逆 下一篇:python中_getitem_如何使用?

    相关文章推荐

    • Python魔法方法之__getattr__和getattribute• python getattr函数如何使用?

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网