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
IntEnumzachowują się jak liczby całkowite oraz obsługują porządkowanie i działania arytmetyczne. - Elementy
Flagmoż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
- Klasa Enum
- IntEnum i Flag
- Podstawy NamedTuple
- typing.NamedTuple