列挙型ソースコードログイン

列挙型ソースコード

上記の例から、列挙型クラスのすべてのメンバーが __members__ を介して走査できることがわかります。なぜ?

まず、Enum のソース コードがどのように実装されているかを大まかに見てみましょう。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 と、メソッド __members__( cls) は @property を通じてアクセスされます __members__

を通じて直接アクセスできる変数形式に変更されました次のセクション
コースウェア