列挙型ソースコード

上記の例から、列挙型クラスのすべてのメンバーが __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__

を通じて直接アクセスできる変数形式に変更されました
学び続ける
  • おすすめコース
  • コースウェアのダウンロード
現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜