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の指定された属性の値を返します。nameは文字列でなければなりません。文字列がオブジェクトの属性の 1 つの名前である場合、結果はその属性の値になります。たとえば、getattr(x, 'foobar')は と同等x.foobarです。指定された属性が存在しない場合、指定されている場合はdefaultが返され、そうでない場合AttributeErrorは発生します。

于 2012-10-09T14:10:14.230 に答える