enum-문자열 변환시 enum 값 얻기


108

다음 열거 형을 정의했습니다.

from enum import Enum


class D(Enum):
    x = 1
    y = 2


print(D.x)

이제 인쇄 된 값은

D.x

대신 enum의 값이 인쇄되기를 원했습니다.

1

이 기능을 달성하기 위해 할 수 있습니까?


1
액세스 매개 변수를 명확히해야합니다. Dxvalue를 알고 있습니다. 원하는 것은 Dx 문자열 변환으로 값을 반환하는 것입니다. 질문이 조건을 명확하게하지 않으면 죄송합니다.
Vaibhav Mishra

답변:


188

열거 형 개체를 인쇄하고 있습니다. .value인쇄하려는 경우 속성을 사용하십시오 .

print(D.x.value)

열거 형 멤버 및 해당 속성에 대한 프로그래밍 방식 액세스 섹션을 참조하십시오 .

열거 형 멤버가 있고 해당 이름 또는 값이 필요한 경우 :

>>>
>>> member = Color.red
>>> member.name
'red'
>>> member.value
1

__str__원하는 모든 것이 사용자 지정 문자열 표현을 제공하는 것이라면 열거 형에 메서드를 추가 할 수 있습니다 .

class D(Enum):
    def __str__(self):
        return str(self.value)

    x = 1
    y = 2

데모:

>>> from enum import Enum
>>> class D(Enum):
...     def __str__(self):
...         return str(self.value)
...     x = 1
...     y = 2
... 
>>> D.x
<D.x: 1>
>>> print(D.x)
1

정수 값과 비교하면 객체로 반환됩니다. 예 : if D.x == 10: .... 정수에 대해 어떤 접근 방식을 취해야합니까?
alper

@alper : 정확히 같은 방식입니다. D.x열거 형 개체이고 D.x.value정수 값입니다. 열거 형 값이 정수처럼 작동하도록해야하는 경우 각 요소가의 하위 클래스 이므로 작동 하는 IntEnum유형을 사용하십시오 . intIntEnumD.x == 10
Martijn Pieters

내가 추가 한 def __eq__(self, other): return int(self.value) == otherdef __int__(self): return int(self.value)하지만 여전히 나는 내가 사용한다고 생각 .value나는 비교 사용하지 않는 경우 경우에
alper

@alper : 다른 enum 값이 __eq__있으면 해당 구현이 작동하지 않습니다 other. D.x == D.y여기서 D.x.value == D.y.value사실이 될 것이다, 예를 들면 실패합니다. 거기 IntEnum대신 사용하고 싶은 것 같습니다 Enum.
Martijn Pieters

7

다음을 사용하여 액세스를 구현했습니다.

class D(Enum):
    x = 1
    y = 2

    def __str__(self):
        return '%s' % self.value

이제 나는 할 수 있습니다

print(D.x)1결과 를 얻으려면 .

대신 self.name인쇄하려는 경우 에도 사용할 수 있습니다 .x1


2
왜 문자열 형식화 및 self._value_? return str(self.value)더 간단합니다.
Martijn Pieters

1
나는 방금 소스를 보았고 이것이 구현 된 방법이지만 당신이 옳고 self.value깨끗합니다.
Vaibhav Mishra

3
단일 밑줄 속성은 생성 된 열거 형 클래스 내부에 있습니다. 문서화 된 속성 (특수 설명자이므로 value열거 형 유형에서 이름으로 계속 사용할 수 있음)을 사용하는 것이 좋습니다 .
Martijn Pieters

@MartijnPieters 동의
하기 Vaibhav 슈라을

0

Enum문자열을 사용하여 액세스 할 때이 페이지를 찾았습니다 . 나는 이것이이 특별한 질문에서 묻는 것이 아니라 제목이 그것을 '제안'한다는 것을 알고 있습니다.

문자열을 사용하여 Enum을 얻으려면 다음을 수행 할 수 있습니다.

from enum import Enum


class D(Enum):
    x = 1
    y = 2


print(D["x"])  # <D.x: 1>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.