Python 3.x: эквивалент Java valueOf() в Python 3.x

Изучая 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 не так легко (пока). Я пытался подражать Enum с:

class Mapping:
    C11=1
    C12=2

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

К сожалению, я не знаю, как преобразовать строку в атрибут, который будет вызываться так (или что-то подобное). Мне это нужно, потому что у меня есть ОГРОМНЫЙ список в классе Mapping, и мне нужно преобразовать кажущиеся случайными слова, прочитанные из текстового файла, в целочисленное отображение.

2 ответа

Решение

Ты ищешь getattr:

>>> getattr(Mapping, s)
1

Из документации:

getattr (объект, имя [, по умолчанию])

Вернуть значение именованного атрибута объекта. имя должно быть строкой. Если строка является именем одного из атрибутов объекта, результатом является значение этого атрибута. Например, getattr(x, 'foobar') эквивалентно x.foobar, Если названный атрибут не существует, по умолчанию возвращается, если предоставлено, иначе AttributeError Поднялся.

Использование getattr:

class Mapping:
    C11=1
    C12=2

print(getattr(Mapping, 'C11')) # prints 1
Другие вопросы по тегам