0Pricing
Python Academy · Lekcja

IntEnum i Flag

Używaj wyliczeń całkowitych i flagowych

IntEnum i Flag to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Poza zwykłym enumem

Moduł enum udostępnia wyspecjalizowane klasy bazowe. Elementy IntEnum zachowują się jak liczby całkowite, a elementy Flag można łączyć za pomocą operatorów bitowych. Klasy te obsługują przypadki, w których zwykły Enum jest zbyt ograniczający.

Zwykły Enum nie jest int

Element zwykłego Enum nie jest wymienny z odpowiadającą mu wartością całkowitą. Porównanie go z liczbą zwraca wartość False.

from enum import Enum

class Level(Enum):
    LOW = 1
    HIGH = 2

print(Level.LOW == 1)

IntEnum porównuje się jak int

Element IntEnum jest liczbą całkowitą, więc jest równy swojej wartości liczbowej i obsługuje porządkowanie.

from enum import IntEnum

class Level(IntEnum):
    LOW = 1
    HIGH = 2

print(Level.LOW == 1)
print(Level.LOW < Level.HIGH)

IntEnum w działaniach arytmetycznych

Ponieważ elementy są rzeczywistymi liczbami całkowitymi, można ich używać w działaniach matematycznych i indeksowaniu. Należy z tego korzystać, gdy wartość rzeczywiście musi współpracować z kodem numerycznym.

from enum import IntEnum

class Priority(IntEnum):
    LOW = 1
    MEDIUM = 5
    HIGH = 10

print(Priority.HIGH + 1)
print(Priority.MEDIUM * 2)

Sortowanie elementów IntEnum

Ponieważ IntEnum obsługuje porządkowanie, listę elementów można sortować według wartości bez dodatkowej funkcji klucza.

from enum import IntEnum

class Priority(IntEnum):
    LOW = 1
    MEDIUM = 5
    HIGH = 10

for p in sorted([Priority.HIGH, Priority.LOW, Priority.MEDIUM]):
    print(p.name)

Flag dla opcji, które można łączyć

Enum typu Flag jest przeznaczony dla wartości, które będą łączone. Należy przypisać potęgi liczby 2, aby każdy element zajmował własny bit.

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

print(Permission.READ)
print(Permission.READ.value)

Łączenie flag za pomocą |

Do łączenia flag w jedną wartość złożoną służy bitowy operator OR |.

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
print(access)

Sprawdzanie przynależności za pomocą in

Obecność ustawionej flagi można sprawdzić za pomocą operatora in, który sam wykonuje odpowiedni test bitowy.

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
print(Permission.READ in access)
print(Permission.EXECUTE in access)

Część wspólna i usuwanie

Flagi należy łączyć za pomocą & (AND), aby znaleźć wspólne bity, a flagę usuwać za pomocą & w połączeniu z dopełnieniem ~.

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
still = access & ~Permission.WRITE
print(still)

IntFlag dla flag całkowitoliczbowych

IntFlag łączy oba podejścia: udostępnia flagi, które można łączyć, a jednocześnie zachowują się jak zwykłe liczby całkowite. Jest to przydatne podczas współpracy z interfejsami API języka C lub maskami bitowymi przechowywanymi jako liczby.

from enum import IntFlag, auto

class Mode(IntFlag):
    R = 4
    W = 2
    X = 1

m = Mode.R | Mode.W
print(int(m))

Iterowanie po połączonej fladze

Iterowanie po połączonej wartości typu Flag zwraca każdy zawarty w niej pojedynczy element flagi, co jest przydatne przy wyświetlaniu aktywnych opcji.

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.EXECUTE
for p in access:
    print(p.name)

Szybkie sprawdzenie

Dlaczego warto wybrać enum typu Flag zamiast zwykłego Enum?

Podsumowanie

Nauczyli się Państwo korzystać z enumów całkowitoliczbowych i flagowych.

  • Elementy IntEnum zachowują się jak liczby całkowite oraz obsługują porządkowanie i działania arytmetyczne.
  • Elementy Flag można łączyć za pomocą |, & i ~, a ich obecność sprawdzać za pomocą in.
  • IntFlag łączy oba zachowania.
  • Dla wartości flag należy używać potęg liczby 2.

Często zadawane pytania

Czy lekcja „IntEnum i Flag” jest bezpłatna?

Tak — pełny tekst „IntEnum i Flag” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „IntEnum i Flag”?

Używaj wyliczeń całkowitych i flagowych Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Python Academy?

Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „IntEnum i Flag”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?

Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Klasa Enum
  2. IntEnum i Flag
  3. Podstawy NamedTuple
  4. typing.NamedTuple
← Powrót do Python Academy