3

在学习 Python 3 并将我的一些代码从 Java 转换为 Python 3.3 时,我遇到了一个我无法解决的小问题。
在Java中我有这个代码(只是虚拟代码使它更小):

public enum Mapping {
    C11{public int getMapping(){ return 1;}},
    C12{public int getMapping(){ return 2;}},
    public abstract int getMapping();
}

String s = "C11";
System.out.println(Mapping.valueOf(s))

工作正常并打印要求的“1”尝试在 Python 中执行此操作并不容易(还)。我试图模仿一个枚举:

class Mapping:
    C11=1
    C12=2

s = 'C11'
print(Mapping.Mapping.(magic should happen here).s)

不幸的是,我不知道如何将字符串转换为要这样调用的属性(或类似的东西)。我需要这个,因为我在类 Mapping 中有一个巨大的列表,并且需要将从文本文件中读取的看似随机的单词转换为整数映射。

4

2 回答 2

4

您正在寻找getattr

>>> getattr(Mapping, s)
1

从文档中:

getattr(对象,名称[,默认值])

返回object的命名属性的值。名称必须是字符串。如果字符串是对象属性之一的名称,则结果是该属性的值。例如,getattr(x, 'foobar')等价于x.foobar。如果命名属性不存在,则返回默认值(如果提供),否则AttributeError引发。

于 2012-10-09T14:10:14.230 回答
1

使用getattr

class Mapping:
    C11=1
    C12=2

print(getattr(Mapping, 'C11')) # prints 1
于 2012-10-09T14:10:27.023 回答