Wyliczenia w Pythonie

Wyliczenia w Pythonie

Ten artykuł wyjaśnia wyliczenia w Pythonie.

YouTube Video

Wyliczenia w Pythonie

Enum w Pythonie to specjalna klasa do definiowania stałych, poprawiająca czytelność i pomagająca unikać błędów programistycznych.

Czym jest Enum?

Enum (skrót od enumeration) to klasa używana do definiowania zestawu nazwanych stałych. Zazwyczaj jest używana do grupowania powiązanych ze sobą stałych. Na przykład nadaje się do reprezentowania kolorów, dni tygodnia lub kierunków.

Dlaczego używać Enum?

Istnieje kilka powodów, aby używać Enum.

  • Poprawiona czytelność: Używanie nazwanych stałych sprawia, że kod jest bardziej intuicyjny.
  • Zapobieganie błędom: Zapobiega zmienianiu lub niewłaściwemu użytkowaniu wartości stałych.
  • Grupowanie: Organizuje powiązane ze sobą stałe w jedną klasę, reprezentującą uporządkowane dane.

Podstawowe użycie Enum

Aby używać enum, zaimportuj moduł enum i zdefiniuj klasę. Klasa powinna dziedziczyć po Enum i definiować wartości, które chcesz traktować jako stałe.

Podstawowy przykład użycia Enum

 1from enum import Enum
 2
 3class Color(Enum):
 4    RED = 1
 5    GREEN = 2
 6    BLUE = 3
 7
 8# Usage of Enum
 9print(Color.RED)        # Color.RED
10print(Color.RED.name)   # RED
11print(Color.RED.value)  # 1

W tym przykładzie definiujemy klasę Enum o nazwie Color z trzema wartościami. Każda nazwa jest dostępna poprzez atrybut name, a przypisana jej wartość przez atrybut value.

Porównywanie Enum

Elementy Enum mogą być porównywane po nazwie lub wartości. Możesz użyć operatora is lub ==, aby sprawdzić tożsamość i równość.

Przykład porównania

 1from enum import Enum
 2
 3class Direction(Enum):
 4    NORTH = 1
 5    SOUTH = 2
 6    EAST = 3
 7    WEST = 4
 8
 9# Equality comparison
10print(Direction.NORTH == Direction.SOUTH)  # False
11print(Direction.NORTH == Direction.NORTH)  # True
12
13# Identity comparison using is
14print(Direction.NORTH is Direction.SOUTH)  # False
15print(Direction.NORTH is Direction.NORTH)  # True

Tutaj przedstawiono porównania Enum za pomocą == i is. Enum został zaprojektowany do poprawnego porównywania obiektów o tych samych nazwach i wartościach.

Automatyczne przypisywanie wartości za pomocą auto()

Jeśli chcesz automatycznie przypisywać wartości członkom Enum, możesz użyć enum.auto(). auto() pozwala Pythonowi automatycznie przypisywać wartości, eliminując konieczność ręcznej specyfikacji przez programistów.

Przykład auto()

 1from enum import Enum, auto
 2
 3class Animal(Enum):
 4    DOG = auto()
 5    CAT = auto()
 6    MOUSE = auto()
 7
 8# Check the values of Enum
 9print(Animal.DOG.value)    # 1
10print(Animal.CAT.value)    # 2
11print(Animal.MOUSE.value)  # 3

W tym przykładzie użycie auto() eliminuje konieczność jawnego określania wartości, czyniąc kod bardziej zwięzłym.

Przypisywanie wielu wartości członkom Enum

Członkowie Enum mogą również przechowywać wiele wartości, na przykład krotki (tuples). Pozwala to każdemu członkowi przechowywać dodatkowe, powiązane informacje.

Przykład użycia krotek (tuples)

 1from enum import Enum
 2
 3class Status(Enum):
 4    ACTIVE = (1, 'Active user')
 5    INACTIVE = (2, 'Inactive user')
 6    SUSPENDED = (3, 'Suspended user')
 7
 8# Accessing Enum members
 9print(Status.ACTIVE.name)    # ACTIVE
10print(Status.ACTIVE.value)   # (1, 'Active user')
11print(Status.ACTIVE.value[1])  # Active user

W tym przykładzie członkowie klasy Status mają po dwie wartości, reprezentujące stan i opis. Jest to przydatne, gdy chcesz powiązać wiele informacji z jednym członkiem Enum.

Używanie Enum jako flag

Enum w Pythonie zawiera klasę Flag, która może być używana jak flagi bitowe. Używanie Flag umożliwia zarządzanie wieloma stanami jednocześnie.

Przykład użycia Flag

 1from enum import Flag, auto
 2
 3class Permission(Flag):
 4    READ = auto()
 5    WRITE = auto()
 6    EXECUTE = auto()
 7
 8# Combining flags
 9permission = Permission.READ | Permission.WRITE
10print(permission)                 # Permission.READ|WRITE
11print(Permission.EXECUTE in permission)  # False

W tym przykładzie używane są operacje bitowe do łączenia wielu uprawnień. Używanie Flag umożliwia zwięzłe zarządzanie wieloma stanami.

Punkty do zapamiętania podczas korzystania z Enum

Niezmienność Enum

Członkowie Enum są niezmienni. Po zdefiniowaniu ich nazw lub wartości nie można zmienić. Jest to ważna cecha zapewniająca spójność jako stałe.

1from enum import Enum
2
3class Days(Enum):
4    MONDAY = 1
5    TUESDAY = 2
6
7# Example of immutability
8# Days.MONDAY = 3  # AttributeError: Cannot reassign members.

Zakaz duplikowania członków

Enum musi mieć unikalne nazwy i wartości. Nawet gdy duplikaty wartości są dozwolone, Python automatycznie priorytetuje pierwszego członka.

Podsumowanie

Moduł enum w Pythonie jest bardzo przydatnym narzędziem do grupowania zbiorów stałych, poprawy czytelności i utrzymania spójności kodu. Możliwe jest wiele zastosowań, od podstawowego użycia po automatyczne przypisywanie wartości za pomocą auto(), jak również użycie jako flag bitowych.

Prawidłowe zrozumienie i opanowanie enum może poprawić jakość kodu i pomóc w zapobieganiu błędom.

Możesz śledzić ten artykuł, korzystając z Visual Studio Code na naszym kanale YouTube. Proszę również sprawdzić nasz kanał YouTube.

YouTube Video