【问题标题】:Python 3.x: Java valueOf() equivalent in Python 3.xPython 3.x:在 Python 3.x 中等效的 Java valueOf()
【发布时间】:2012-10-09 14:07:08
【问题描述】:

在学习 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 中有一个巨大的列表,需要将从文本文件读取的看似随机的单词转换为整数映射。

【问题讨论】:

  • 请阅读Python is not Java,不是因为这个具体的问题,而是因为它和你问它的方式表明你仍然主要用Java术语思考。
  • 我会这样做的,谢谢你的提示!

标签: java python-3.x value-of


【解决方案1】:

您正在寻找getattr:

>>> getattr(Mapping, s)
1

来自文档:

getattr(object, name[, default])

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

【讨论】:

    【解决方案2】:

    使用getattr:

    class Mapping:
        C11=1
        C12=2
    
    print(getattr(Mapping, 'C11')) # prints 1
    

    【讨论】:

      猜你喜欢
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      • 2022-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多