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