러스트에서의 enum은 정말 멋지죠? 특히 필드를 가질 수 있는 enum 덕분에 함수형 프로그래밍의 매력을 한껏 느낄 수 있습니다. 그런데, 이런 멋진 기능이 파이썬에도 있다면 어떨까요? 바로 여기, fieldenum이 그 답입니다!
파이썬에서 필드형 Enum이 왜 필요할까요?
기존의 파이썬 `Enum`과 `dataclass`는 각각의 한계를 가지고 있습니다. `Enum`은 필드를 가질 수 없고, `dataclass`는 선택지의 개념이 없습니다. 하지만 `fieldenum`은 이 두 가지의 장점을 결합하여 파이썬에서도 필드를 가진 enum을 사용할 수 있게 합니다.
설치 및 호환성
`fieldenum`의 설치는 아주 간단합니다. 다음 명령어를 사용하세요:
pip install fieldenum
이 패키지는 파이썬 3.10 이상에서 호환됩니다. 단, 하위 모듈인 `fieldenum.enums`는 파이썬 3.12 이상에서만 사용 가능합니다.
사용 방법
기본적인 사용 예시
`@fieldenum` 데코레이터를 사용하여 클래스에 `Variant` 혹은 `Unit`을 값으로 가지는 변수를 추가하면, 간단하게 `fieldenum`을 만들 수 있습니다. 예를 들어보겠습니다:
from fieldenum import Variant, Unit, fieldenum
@fieldenum
class Message:
Quit = Unit
Write = Variant(str)
이렇게 정의된 `Message` enum을 사용할 때는 각 배리언트를 인스턴스화하여 사용합니다.
message = Message.Quit
write_message = Message.Write("Hello, World!")
배리언트 정의하기
모든 `fieldenum`은 배리언트를 가질 수 있는데, 유닛 배리언트와 튜플형 배리언트를 지원합니다. 유닛 배리언트는 별도의 필드가 없으며, 튜플형 배리언트는 여러 필드를 가질 수 있습니다.
유닛 배리언트
from fieldenum import Unit, fieldenum
@fieldenum
class Action:
Stop = Unit
Start = Unit
action = Action.Stop
if action is Action.Stop:
print("Action is Stop")
튜플형 배리언트
from fieldenum import Variant, fieldenum
@fieldenum
class Command:
Move = Variant(int, int)
Speak = Variant(str)
command = Command.Move(10, 20)
print(command)
이름 있는 배리언트
이름 있는 배리언트는 키워드 인자를 통해 필드를 초기화할 수 있습니다.
from fieldenum import Variant, fieldenum
@fieldenum
class Coordinate:
Point2D = Variant(x=float, y=float)
Point3D = Variant(x=float, y=float, z=float)
point = Coordinate.Point3D(x=1.0, y=2.0, z=3.0)
print(f"Point: {point.x}, {point.y}, {point.z}")
다양한 활용 예시
`fieldenum`은 Railroad Oriented Programming이나 Option과 같은 함수형 프로그래밍의 개념을 파이썬에서도 쉽게 사용할 수 있도록 도와줍니다.
Option 타입의 활용
Option 타입을 사용하여 값이 있거나 없는 상태를 나타낼 수 있습니다.
from fieldenum.enums import Option, Some
optional_value = Option.new(input("Type anything!") or None)
match optional_value:
case Some(value):
print(f"Value: {value}")
case Option.Nothing:
print("No value")
이 예제에서 `Option.new()` 메서드를 사용하면, 값이 있으면 `Option.Some`을, 값이 없으면 `Option.Nothing`을 반환합니다.
결론
파이썬에서 필드형 enum을 사용할 수 있는 `fieldenum`은 함수형 프로그래밍의 매력을 파이썬에서도 누릴 수 있게 해주는 강력한 도구입니다. 다양한 데이터 구조와 패턴을 구현할 수 있으며, 파이썬의 유연함과 러스트의 강력함을 모두 갖춘 이 도구를 꼭 사용해보세요!
참고 자료: GitHub, “fieldenum”