from dataclasses import dataclass
from enum import Enum


class TestEnum(Enum):
    _ignore_ = ["TestData"]

    @dataclass
    class TestData:
        title: str
        exclude: str

        def dict(self):
            return {k: v for k, v in self.__dict__.items() if k != "exclude"}

    A = TestData(title="hello", exclude="world")
    B = TestData(title="hello2", exclude="world2")


c = TestEnum.A.value
print(c.dict())
print(list(TestEnum))

이번에 처음 dataclass를 써봤는데 좀 어색하네요. dataclasses는 파이썬 3.7부터 추가된 모듈입니다.

enum의 Value로 뭔가 여러 정보가 들어가야 하는 상황이었는데, 처음엔 그냥 dict로 때려 넣었다가 리뷰 받고 이런식으로 바꿔봤습니다

이때 list(TestEnum) 이런식으로 리스트를 만들면 데이터클래스가 포함되는데, 이걸 방지하려면 _ignore_에 dataclass의 이름을 적어주시면 되겠습니다.

아니면 dataclass를 Enum 바깥으로 빼는 것도 하나의 방법이겠습니다.

반응형