파이썬에서 열거형에 대한 일반적인 관행은 무엇입니까?
열거 유형(스펠링)을 구현하려면 어떻게 해야 합니까?enum
파이썬에서)?이 기능을 사용하기 위한 일반적인 방법은 무엇입니까?
class Materials:
Shaded, Shiny, Transparent, Matte = range(4)
>>> print Materials.Matte
3
업데이트: Python 3.4+의 경우:
Python 3.4+부터는 이제Enum
(또는)IntEnum
을 적은.int
값)을 입력합니다.값을 자동으로 증가시키는 데 사용합니다.
import enum
class Materials(enum.IntEnum):
Shaded = 1
Shiny = enum.auto()
Transparent = 3
Matte = enum.auto()
print(Materials.Shiny == 2) # True
print(Materials.Matte == 4) # True
저는 이 패턴을 여러 번 보았습니다.
>>> class Enumeration(object):
def __init__(self, names): # or *names, with no .split()
for number, name in enumerate(names.split()):
setattr(self, name, number)
>>> foo = Enumeration("bar baz quux")
>>> foo.quux
2
클래스 구성원을 사용할 수도 있지만 고유한 번호를 입력해야 합니다.
>>> class Foo(object):
bar = 0
baz = 1
quux = 2
>>> Foo.quux
2
보다 강력한 것(희소값, 열거형 예외 등)을 찾고 있다면 이 레시피를 사용해 보십시오.
왜 에넘이 파이썬에서 네이티브로 지원되지 않는지 모르겠습니다.내가 그것들을 에뮬레이트하는 가장 좋은 방법은 _str_와 _eq_를 재정의하여 비교할 수 있고 print()를 사용하면 숫자 값 대신 문자열을 얻는 것입니다.
class enumSeason():
Spring = 0
Summer = 1
Fall = 2
Winter = 3
def __init__(self, Type):
self.value = Type
def __str__(self):
if self.value == enumSeason.Spring:
return 'Spring'
if self.value == enumSeason.Summer:
return 'Summer'
if self.value == enumSeason.Fall:
return 'Fall'
if self.value == enumSeason.Winter:
return 'Winter'
def __eq__(self,y):
return self.value==y.value
용도:
>>> s = enumSeason(enumSeason.Spring)
>>> print(s)
Spring
당신은 아마 상속 구조를 사용할 수 있을 것입니다. 하지만 이것을 가지고 놀수록 더럽게 느껴졌습니다.
class AnimalEnum:
@classmethod
def verify(cls, other):
return issubclass(other.__class__, cls)
class Dog(AnimalEnum):
pass
def do_something(thing_that_should_be_an_enum):
if not AnimalEnum.verify(thing_that_should_be_an_enum):
raise OhGodWhy
언급URL : https://stackoverflow.com/questions/702834/whats-the-common-practice-for-enums-in-python
'programing' 카테고리의 다른 글
Python에서 SVG를 PNG로 변환 (0) | 2023.07.19 |
---|---|
파이썬에서 멀티프로세싱 큐를 사용하는 방법은 무엇입니까? (0) | 2023.07.19 |
이미지를 PIL에서 개방형 CV 형식으로 변환 (0) | 2023.07.19 |
컬러 리소스에서 컬러 인트를 얻으려면 어떻게 해야 합니까? (0) | 2023.07.19 |
Django와 함께 Pylint 사용 (0) | 2023.07.19 |