Aus dem obigen Beispiel können Sie erkennen, dass alle Mitglieder der Aufzählungsklasse über __members__ durchlaufen werden können. Warum also?
Wir können uns zunächst grob ansehen, wie der Quellcode von Enum im Modul enum.py implementiert ist. Schauen wir uns zunächst das Fragment der Enum-Klasse an
class Enum(metaclass=EnumMeta): """Generic enumeration. Derive from this class to define new enumerations. """
Wie Sie sehen können, erbt Enum die Metaklasse EnumMeta; schauen Sie sich noch einmal die relevanten Fragmente von EnumMeta an
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_)
Erste __Mitglieder__ Die Methode gibt einen MappingProxyType zurück, der ein Dict und eine Map enthält, und die Zugriffsmethode der Methode __members__(cls) wird über @property in die Form einer Variablen geändert, auf die direkt über __members__
zugegriffen werden kannnächsten Abschnitt