魔术方法

Python-setattr&hasattr&getattr

2021-01-28  本文已影响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
上一篇 下一篇

猜你喜欢

热点阅读