问题:如何访问给定字符串的对象属性,该字符串对应于该属性的名称
如何设置/获取t
给定的属性的值x
?
class Test:
def __init__(self):
self.attr1 = 1
self.attr2 = 2
t = Test()
x = "attr1"
回答 0
getattr(object, attrname)
setattr(object, attrname, value)
在这种情况下
x = getattr(t, 'attr1')
setattr(t, 'attr1', 21)
回答 1
注意:此答案非常过时。它适用new
于使用2008年不推荐使用的模块的Python 2 。
有内置的python函数setattr和getattr。可以用来设置和获取类的属性。
一个简单的例子:
>>> from new import classobj
>>> obj = classobj('Test', (object,), {'attr1': int, 'attr2': int}) # Just created a class
>>> setattr(obj, 'attr1', 10)
>>> setattr(obj, 'attr2', 20)
>>> getattr(obj, 'attr1')
10
>>> getattr(obj, 'attr2')
20
回答 2
如果要将逻辑隐藏在类内部,则可能更喜欢使用通用的getter方法,如下所示:
class Test:
def __init__(self):
self.attr1 = 1
self.attr2 = 2
def get(self,varname):
return getattr(self,varname)
t = Test()
x = "attr1"
print ("Attribute value of {0} is {1}".format(x, t.get(x)))
输出:
Attribute value of attr1 is 1
可以更好地隐藏它的另一个方法是使用magic方法__getattribute__
,但是我一直遇到一个无限循环,当尝试在该方法中检索属性值时,我无法解决。
另请注意,您也可以使用vars()
。在上面的示例中,您可以getattr(self,varname)
通过进行交换return vars(self)[varname]
,但getattr
根据和之间的区别vars
setattr
是最好的。。