假设我有一个python对象x
和一个字符串s
,如何在x
上设置属性s
?所以:如何以编程方式设置属性?
>>> x = SomeObject()
>>> attr = 'myAttr'
>>> # magic goes here
>>> x.myAttr
'magic'
什么是魔术?顺便说一句,这个目标是将呼叫缓存到x.__getattr__()
。
假设我有一个python对象x
和一个字符串s
,如何在x
上设置属性s
?所以:如何以编程方式设置属性?
>>> 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''.
编辑:但是,您应注意(在评论中指出),你不能这样对待对象的“纯”的实例。但它可能有一个简单的对象的子类,它可以正常工作。我强烈要求O.P.永远不要这样做。
通常,我们为此定义类。
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)
小心,但是,这并不在你的情况下工作,在那里你创建对象的实例()。 – 2008-11-12 19:42:58
绝对正确,但没有。我很方便地忽略了。我强烈要求O.P.永远不要这样做。 – 2008-11-12 19:44:18