Các liệt kê trong Python
Bài viết này giải thích về các liệt kê trong Python.
YouTube Video
Các liệt kê trong Python
Enum
trong Python là một lớp đặc biệt để định nghĩa các hằng số, tăng tính dễ đọc và giúp ngăn ngừa lỗi lập trình.
Enum là gì?
Enum
(viết tắt của enumeration) là một lớp dùng để định nghĩa một tập hợp các hằng số có tên. Nó thường được sử dụng để nhóm các hằng số liên quan lại với nhau. Ví dụ, nó phù hợp để biểu diễn màu sắc, các ngày trong tuần, hoặc các hướng.
Tại sao sử dụng Enum
?
Có một số lý do nên sử dụng Enum
.
- Cải thiện tính dễ đọc: Việc sử dụng các hằng số có tên giúp mã nguồn dễ hiểu hơn.
- Ngăn ngừa lỗi: Nó ngăn chặn sự thay đổi hoặc sử dụng sai các giá trị hằng.
- Tập hợp: Nó tổ chức các hằng số liên quan vào một lớp duy nhất, biểu thị dữ liệu có cấu trúc.
Cách sử dụng cơ bản của Enum
Để sử dụng enum
, nhập mô-đun enum
và định nghĩa một lớp. Lớp này nên kế thừa từ Enum
và định nghĩa các giá trị mà bạn muốn coi là hằng số.
Ví dụ cơ bản về 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
Trong ví dụ này, chúng ta định nghĩa một lớp Enum
có tên là Color
với ba giá trị. Mỗi tên có thể được truy cập thông qua thuộc tính name
và giá trị tương ứng có thể được truy cập thông qua thuộc tính value
.
So sánh các Enum
Các thành viên của Enum
có thể được so sánh theo tên hoặc theo giá trị. Bạn có thể sử dụng toán tử is
hoặc toán tử ==
để kiểm tra nhận dạng và sự bằng nhau.
Ví dụ so sánh
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
Dưới đây là cách so sánh Enum
bằng cách sử dụng ==
và is
được minh họa. Enum
được thiết kế để so sánh đúng các đối tượng có cùng tên và giá trị.
Gán giá trị tự động bằng auto()
Nếu bạn muốn tự động gán giá trị cho các thành viên của Enum
, bạn có thể sử dụng enum.auto()
. auto()
cho phép Python tự động gán giá trị, loại bỏ việc các nhà phát triển phải chỉ định thủ công.
Ví dụ về 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
Trong ví dụ này, việc sử dụng auto()
bỏ qua yêu cầu chỉ định giá trị một cách rõ ràng, giúp mã nguồn ngắn gọn hơn.
Gán nhiều giá trị cho các thành viên của Enum
Các thành viên của Enum
cũng có thể chứa nhiều giá trị, chẳng hạn như tuple. Điều này cho phép mỗi thành viên lưu trữ thông tin liên quan bổ sung.
Ví dụ sử dụng tuple
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
Trong ví dụ này, các thành viên của lớp Status
có hai giá trị mỗi cái, đại diện cho trạng thái và mô tả. Điều này hữu ích khi bạn muốn liên kết nhiều thông tin với một thành viên Enum
.
Sử dụng Enum
như các cờ trạng thái
Enum
của Python bao gồm một lớp Flag
có thể được sử dụng như các cờ bit. Sử dụng Flag
cho phép bạn quản lý nhiều trạng thái kết hợp.
Ví dụ về 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
Trong ví dụ này, các thao tác bitwise được sử dụng để kết hợp nhiều quyền hạn. Sử dụng Flag
cho phép bạn quản lý nhiều trạng thái một cách ngắn gọn.
Những điểm cần lưu ý khi sử dụng Enum
Tính bất biến của Enum
Các thành viên của Enum
là bất biến. Sau khi được xác định, tên hoặc giá trị của chúng không thể thay đổi. Đây là một đặc điểm quan trọng để duy trì tính nhất quán như các hằng số.
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.
Cấm các thành viên trùng lặp
Các thành viên của Enum
phải có tên và giá trị duy nhất. Ngay cả khi các giá trị trùng lặp được phép, Python tự động ưu tiên thành viên đầu tiên.
Tóm tắt
Mô-đun enum
của Python là một công cụ rất hữu ích để nhóm các tập hợp hằng số, cải thiện khả năng đọc và duy trì tính nhất quán của mã. Có nhiều cách sử dụng khác nhau, từ sử dụng cơ bản đến gán giá trị tự động bằng auto()
, cũng như sử dụng làm cờ bit.
Hiểu và thành thạo enum
có thể nâng cao chất lượng mã và giúp ngăn ngừa lỗi.
Bạn có thể làm theo bài viết trên bằng cách sử dụng Visual Studio Code trên kênh YouTube của chúng tôi. Vui lòng ghé thăm kênh YouTube.