Kod sumber Enum

Daripada contoh di atas, anda boleh tahu bahawa semua ahli kelas enumerasi boleh dilalui melalui __ahli__. Jadi kenapa?

Kita boleh terlebih dahulu melihat secara kasar bagaimana kod sumber Enum dilaksanakan dalam modul enum.py Mari kita lihat serpihan kelas Enum

class Enum(metaclass=EnumMeta):
    """Generic enumeration.
    Derive from this class to define new enumerations.
    """

Anda boleh melihat bahawa Enum mewarisi. metaclass EnumMeta; lihat sekali lagi Lihat pada coretan 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_)

Pertama sekali, kaedah __members__ mengembalikan MappingProxyType yang mengandungi Dict atau Map, dan melalui @property, kaedah akses kaedah __members__(cls) ditukar kepada bentuk pembolehubah, yang boleh terus dilalui _ _ahli__ berada di sini untuk lawatan

Meneruskan pembelajaran
  • Cadangan kursus
  • Muat turun perisian kursus