如何在Python中通过字符串访问类变量?

35

代码如下:

class Test:
    a = 1
    def __init__(self):
        self.b=2

当我创建一个 Test 实例时,我可以像这样访问它的实例变量 b(使用字符串"b"):
test = Test()
a_string = "b"
print test.__dict__[a_string]

但是对于a而言它无法起作用,因为self.__dict__不包含一个名为a的键。那么如果我只有一个字符串a,我如何访问a

谢谢!


1
self.__dict__ 不包含名为 a 的键的原因是它在 self.__class__.__dict__ 中。如果你真的想手动处理,可以了解属性搜索顺序并按相同顺序检查所有内容...但你真的不想手动处理。(你必须处理插槽、属性、经典 vs. 新式类、自定义 __dict__、自定义描述符以及各种有趣的东西,这些都是有趣的学习内容,但与解决问题没有直接关系。) - abarnert
1
PS,由于这显然是Python 2.x,除非你有特定的原因避免使用新式类,否则你可能想在这里使用class Test(object)。即使是简单的小测试程序,养成习惯也是值得的。(尤其是对于明确依赖两种类型类别差异的测试程序而言……) - abarnert
5个回答

65

要获取变量,可以这样做:

getattr(test, a_string)

14

使用getattr函数,按照以下方式实现你想要的功能:

test = Test()
a_string = "b"
print getattr(test, a_string)

7

试试这个:

class Test:    
    a = 1    
    def __init__(self):  
         self.b=2   

test = Test()      
a_string = "b"   
print test.__dict__[a_string]   
print test.__class__.__dict__["a"]

6
你可以使用以下代码: getattr(Test, a_string, default_value) 当第三个参数被指定时,如果在 Test 类中未找到 a_string,则返回一些默认值 default_value

1

由于变量是类变量,可以使用以下代码:

class Test:
    a = 1
    def __init__(self):
        self.b=2

print Test.__dict__["a"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接