你如何以编程方式设置属性?

假设我有一个python对象x和一个strings ,如何在x上设置属性s ? 所以:

 >>> x = SomeObject() >>> attr = 'myAttr' >>> # magic goes here >>> x.myAttr 'magic' 

什么魔术? 顺便说一句,这个目标是将调用caching到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 ``xy = v''. 

编辑:但是,你应该注意(正如在评论中指出),你不能这样做到一个“纯”的对象的实例。 但很可能你有一个简单的对象的子类,它可以正常工作。 我强烈要求OP不要这样做。

通常,我们为此定义类。

 class XClass( object ): def __init__( self ): self.myAttr= None x= XClass() x.myAttr= 'magic' x.myAttr 

但是,您可以在一定程度上使用setattrgetattr内置函数执行此操作。 但是,它们不直接处理object实例。

 >>> a= object() >>> setattr( a, 'hi', 'mom' ) Traceback (most recent call last): File "<stdin>", line 1, in <module> 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)