Python:通过字符串访问类属性

289 投票
4 回答
215823 浏览
提问于 2025-04-15 13:05

我有一个像下面这样的类:

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

撰写回答