Python 字符串转属性

89 投票
3 回答
75702 浏览
提问于 2025-04-16 01:20

我想实现这样的功能:

def get_foo(someobject, foostring):
    return someobject.foostring

举个例子:

如果我执行 get_foo(obj, "name"),那么它应该返回 obj.name 的值(虽然输入是一个字符串,但我希望它能像访问属性一样调用)。

谢谢!

3 个回答

37

你应该使用 setattr 和 getattr:

setattr(object,'property',value)
getattr(object,'property',default)
54

如果someobject这个对象有一个叫做foostring的属性,那么

def get_foo(someobject, foostring):
    return getattr(someobject,foostring)

或者如果你想把一个属性设置到这个对象上,那么:

def set_foo(someobject, foostring, value):
    return setattr(someobject,foostring, value)

试试看

125

使用内置的函数 getattr

getattr(对象, 属性名[, 默认值])

这个函数可以用来获取一个对象的指定属性的值。属性名必须是一个字符串。如果这个字符串是对象某个属性的名字,返回的就是这个属性的值。比如,getattr(x, 'foobar') 就相当于 x.foobar。如果你请求的属性不存在,且你提供了默认值,那么就返回这个默认值;如果没有提供默认值,就会出现一个叫 AttributeError 的错误。

撰写回答