假設我有一個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