Enum-Quellcode

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 kann
Weiter lernen
||
einreichenCode zurücksetzen