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