Dieser Artikel enthält eine detaillierte Erklärung (Codebeispiel) der Aufzählungstypen in Python. Ich hoffe, dass er für Freunde hilfreich ist.
Die nativen Typen von Python enthalten keine Aufzählungstypen. Um eine bessere Lösung zu bieten, hat Python die Enum-Standardbibliothek in Version 3.4 über PEP 435 hinzugefügt.
Der Aufzählungstyp kann als Beschriftung oder Sammlung von Konstanten betrachtet werden, die normalerweise zur Darstellung bestimmter begrenzter Sammlungen wie Wochentage, Monate, Status usw. verwendet werden. Was machen wir, wenn es keinen speziell bereitgestellten Aufzählungstyp gibt? Im Allgemeinen wird er über ein Wörterbuch oder eine Klasse implementiert:
Color = { 'RED' : 1, 'GREEN': 2, 'BLUE' : 3, } class Color: RED = 1 GREEN = 2 BLUE = 3
Diese Art der Aufzählung ist bei sorgfältiger Verwendung natürlich kein Problem. es ist eine Kompromisslösung. Die Gefahr besteht darin, dass es geändert werden kann.
Verwenden Sie Enum
Eine bessere Möglichkeit ist die Verwendung des von der Standardbibliothek bereitgestellten Typs Enum
. Die offizielle Bibliothek ist vertrauenswürdig. Versionen vor 3.4 können unterstützte Bibliotheken auch über pip install enum
herunterladen. Einfaches Beispiel:
from enum import Enum class Color(Enum): red = 1 green = 2 blue = 3
Aufzählungsmitglieder haben Werte (standardmäßig wiederholbar) und Aufzählungsmitglieder haben benutzerfreundliche Zeichenfolgendarstellungen:
>>> print(Color.red) Color.red >>> print(repr(Color.red)) <Color.red: 1> >>> type(Color.red) <Enum 'Color'> >>> isinstance(Color.green, Color) True
Aufzählungstypen sind nicht instanziierbar und können nicht geändert werden.
Definieren Sie eine Aufzählung
Beim Definieren einer Aufzählung darf der Mitgliedsname nicht wiederholt werden
class Color(Enum): red = 1 green = 2 red = 3 # TypeError: Attempted to reuse key: 'red'
Der Mitgliedswert ist zulässig um derselbe zu sein, wird der Name des zweiten Mitglieds als Alias des ersten Mitglieds betrachtet
class Color(Enum): red = 1 green = 2 blue = 1 print(Color.red) # Color.red print(Color.blue) # Color.red print(Color.red is Color.blue)# True print(Color(1)) # Color.red 在通过值获取枚举成员时,只能获取到第一个成员
Wenn Sie nicht denselben Mitgliedswert definieren können, können Sie ihn mit eindeutigem versehen
from enum import Enum, unique @unique class Color(Enum): red = 1 green = 2 blue = 1 # ValueError: duplicate values found in <enum 'Color'>: blue -> red
Aufzählungswert
Sie können Mitglieder nach Mitgliedsname oder Mitgliedswert abrufen:
print(Color['red']) # Color.red 通过成员名来获取成员 print(Color(1)) # Color.red 通过成员值来获取成员
Jedes Mitglied hat ein Namensattribut und ein Wertattribut:
member = Color.red print(member.name) # red print(member.value) # 1
unterstützt das iterative Durchlaufen von Mitgliedern in der definierten Reihenfolge. Wenn Mitglieder mit doppelten Werten vorhanden sind, wird nur das erste doppelte Mitglied erhalten:
for color in Color: print(color)
Spezielles Attribut__members__
ist ein Name, dem zugeordnet wird Ein geordnetes Wörterbuch von Mitgliedern, das auch durchlaufen werden kann durch:
for color in Color.__members__.items(): print(color) # ('red', <Color.red: 1>)
Aufzählungsvergleich
Die Mitglieder der Aufzählung können nach is
Identität oder nach Gleichheitsvergleich: ==
Color.red is Color.red Color.red is not Color.blue Color.blue == Color.red Color.blue != Color.red
Color.red < Color.blue # TypeError: unorderable types: Color() < Color()
Erweiterte Aufzählung IntEnum
IntEnum ist eine Erweiterung von Enum, verschiedene Typen von ganzzahligen Aufzählungen können auch miteinander verglichen werden:from enum import IntEnum class Shape(IntEnum): circle = 1 square = 2 class Request(IntEnum): post = 1 get = 2 print(Shape.circle == 1) # True print(Shape.circle < 3) # True print(Shape.circle == Request.post) # True print(Shape.circle >= Request.post) # True
Zusammenfassung
enum Die Funktion des Aufzählungsmoduls ist sehr klar, die Verwendung ist einfach und die Implementierung Es lohnt sich auch, die Methode zu erlernen, wenn Sie die Möglichkeit haben, einen Blick auf den Quellcode zu werfen.Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Aufzählungstypen in Python (Codebeispiele). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!