美文网首页魔术方法
Python-setattr&hasattr&getattr

Python-setattr&hasattr&getattr

作者: 小二哥很二 | 来源:发表于2021-01-28 16:11 被阅读0次

    1、hasattr(object, name)

    判断object中是否含有name属性,返回布尔值;这里的name是string类型

    class A:
        name = 'python'
        def test(self):
            return 'A()的方法test()'
    
    print(hasattr(A, 'name'))   ==>true
    print(hasattr(A, 'age'))    ==>false
    print(hasattr(A, 'test'))   ==>true
    

    2、getattr(object, name[, default])

    1)获取object中的name属性,如果没有该属性且没传入default值,就会报错
    2)如果没有该属性,但是传入了default值,就会返回default的值
    3)如果调用方法,由于类下面的是实例方法,所以调用方式是:getattr(B(), 'func')()

    class B:
        name = 'python'
        def test(self):
            return 'Hello world'
    
    print(getattr(B, 'name'))      ==>python
    # print(getattr(B, 'age'))     ==>报错AttributeError: type object 'B' has no attribute 'age'
    print(getattr(B, 'age', 20))   ==>20
    print(getattr(B, 'test'))      ==><function B.test at 0x0000019892674620>
    print(getattr(B(), 'test')())     ==>Hello world
    

    3、setattr(object, name, value)

    给object对象的name属性赋值value,如果对象原本存在给定的属性name,则setattr会更改属性的值为给定的value;如果对象原本不存在属性name,setattr会在对象中创建属性,并赋值为给定的value

    class C:
        name = 'python'
        def test(self):
            return '萨瓦迪卡'
    
    setattr(C, 'name', 'java')    ==>将name属性赋值为java
    print(getattr(C, 'name'))     ==>java
    print(C.name)                 ==>java
    setattr(C, 'age', 66)         ==将不存在的属性age赋值为66
    print(getattr(C, 'age'))      ==>66
    

    相关文章

      网友评论

        本文标题:Python-setattr&hasattr&getattr

        本文链接:https://www.haomeiwen.com/subject/cmgttltx.html