열거형 소스 코드
위의 예에서 열거형 클래스의 모든 멤버는 __members__를 통해 탐색될 수 있음을 알 수 있습니다. 왜?
먼저 Enum의 소스 코드가 enum.py 모듈에 어떻게 구현되어 있는지 대략적으로 살펴보겠습니다. 먼저 Enum 클래스의 일부를 살펴보겠습니다.
class Enum(metaclass=EnumMeta): """Generic enumeration. Derive from this class to define new enumerations. """
Enum이 EnumMeta 메타클래스를 상속하는 것을 볼 수 있습니다. ; 다시 살펴보기 EnumMeta
class EnumMeta(type): """Metaclass for Enum""" @property def __members__(cls): """Returns a mapping of member name->value. This mapping lists all enum members, including aliases. Note that this is a read-only view of the internal mapping. """ return MappingProxyType(cls._member_map_)
관련 스니펫을 살펴보세요. 먼저 __members__ 메서드는 Dict 또는 Map이 포함된 MappingProxyType을 반환하고 @property를 통해 __members__(cls) 메서드의 액세스 메서드가 다음 형식으로 변경됩니다. 직접 전달할 수 있는 변수의 _ _members__ 님이 방문하셨습니다