你如何以编程方式设置属性?
假设我有一个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
但是,您可以在一定程度上使用setattr
和getattr
内置函数执行此操作。 但是,它们不直接处理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)