假设我有一个Python对象x
和一个字符串s
,我怎么设置属性s
上x
?所以:
>>> x = SomeObject() >>> attr = 'myAttr' >>> # magic goes here >>> x.myAttr 'magic'
什么是魔术?顺便说一下,这个目的是缓存呼叫x.__getattr__()
.
setattr(x, attr, 'magic')
寻求帮助:
>>> help(setattr) Help on built-in function setattr in module __builtin__: setattr(...) setattr(object, name, value) Set a named attribute on an object; setattr(x, 'y', v) is equivalent to ``x.y = v''.
编辑:但是,您应该注意(如评论中所指出的)您不能对"纯粹"的实例执行此操作object
.但是很可能你有一个简单的对象子类,它可以很好地工作.我强烈要求OP永远不要像这样做对象的实例.
通常,我们为此定义类.
class XClass( object ): def __init__( self ): self.myAttr= None x= XClass() x.myAttr= 'magic' x.myAttr
但是,您可以在一定程度上,与做这个setattr
和getattr
内置函数.但是,它们不能object
直接用于实例.
>>> a= object() >>> setattr( a, 'hi', 'mom' ) Traceback (most recent call last): File "", line 1, in AttributeError: 'object' object has no attribute 'hi'
但是,他们可以处理各种简单的类.
class YClass( object ): pass y= YClass() setattr( y, 'myAttr', 'magic' ) y.myAttr
让x成为一个对象然后你可以用两种方式做
x.attr_name = s setattr(x, 'attr_name', s)