当前位置: 代码迷 >> 综合 >> python中的反射(getattr,setattr,hasattr,delattr)解析
  详细解决方案

python中的反射(getattr,setattr,hasattr,delattr)解析

热度:9   发布时间:2023-12-27 10:35:27.0
class Foo:def __init__(self,name,age):self.name = nameself.age = ageobj = Foo('alex',18)

如果想通过字符串操作对象中的成员,就如下所示的方式:

obj.name
b = 'name'
obj.b  # obj.name

会报错:AttributeError: ‘Foo’ object has no attribute ‘b’
这时就可以依靠python中的反射来操作

# 通过字符串的形式操作对象中的成员
inp = input('>>>')
v = getattr(obj,inp)  # 去什么里面获取什么内容
print(v)
out:
>>>name
alex
print(hasattr(obj,'name'))  # 判断什么里面有没有什么
out:
True
setattr(obj,'k1','v1')
print(obj.k1)

setattr()函数对应函数getattr()函数,用于设置属性值。参数是对象、字符串和任意值。字符串可以命名现有属性或新属性。如果对象允许,函数将值赋给属性。例如,setattr(x,‘foobar’,123)等同于x.foobar=123。

out:
v1
delattr(obj,'name')
obj.name

delattr用来删除指定对象中的值

out:#报错
AttributeError: 'Foo' object has no attribute 'name'