Python:通过字符串访问类属性
我有一个像下面这样的类:
class User:
def __init__(self):
self.data = []
self.other_data = []
def doSomething(self, source):
// if source = 'other_data' how to access self.other_data
我想在doSomething
这个方法里传一个字符串给源变量,并且访问同名的类成员。
我试过用getattr
,但我发现它只对函数有效。另外,我还尝试让User
继承dict
,然后用self.__getitem__
,但也不行。请问有什么好的方法可以做到这一点呢?
4 个回答
115
下面是一些关于Python中属性操作的简单解释:
getattr(x, 'y')
就是说“给我 x 这个对象的 y 属性”,和x.y
是一样的。setattr(x, 'y', v)
是在说“把 v 这个值赋给 x 的 y 属性”,和x.y = v
是一样的。delattr(x, 'y')
意思是“删除 x 的 y 属性”,和del x.y
是一样的。
269
一张图片胜过千言万语:
>>> class c:
pass
o = c()
>>> setattr(o, "foo", "bar")
>>> o.foo
'bar'
>>> getattr(o, "foo")
'bar'
394
这段代码 x = getattr(self, source)
会很好地运行,只要 source
是指向 self
的任何一个属性,包括你例子中的 other_data
。