如何设置/获取由x给出的t的属性值?
class Test:
def __init__(self):
self.attr1 = 1
self.attr2 = 2
t = Test()
x = "attr1"
如何设置/获取由x给出的t的属性值?
class Test:
def __init__(self):
self.attr1 = 1
self.attr2 = 2
t = Test()
x = "attr1"
当前回答
有内置函数getattr和setattr
getattr(object, attrname)
setattr(object, attrname, value)
在这种情况下
x = getattr(t, 'attr1')
setattr(t, 'attr1', 21)
其他回答
有内置函数getattr和setattr
getattr(object, attrname)
setattr(object, attrname, value)
在这种情况下
x = getattr(t, 'attr1')
setattr(t, 'attr1', 21)
注意:这个答案非常过时。它适用于使用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
如果你想让逻辑隐藏在类中,你可能更喜欢使用一个通用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
另一种可以更好地隐藏它的方法是使用神奇的方法__getattribute__,但我一直得到一个无尽的循环,当我试图检索该方法中的属性值时,我无法解决。
还要注意,您也可以使用vars()。在上面的例子中,你可以通过返回vars(self)[varname]来交换getattr(self,varname),但是根据“vars和setattr之间的区别是什么?”的答案,getattr可能更可取。