Literal
Literal là một tính năng được cung cấp bởi module typing
(hoặc typing_extensions
nếu bạn dùng Python < 3.8), cho phép bạn giới hạn giá trị của một biến chỉ trong một số giá trị cố định cụ thể.
Cú pháp cơ bản:
from typing import Literal
def get_drink(choice: Literal["coffee", "tea"]) -> str:
return f"You chose {choice}"
Cách hoạt động
Biến choice
trong ví dụ trên chỉ được phép nhận một trong hai giá trị: "coffee"
hoặc "tea"
. Nếu bạn truyền vào "beer"
, IDE hoặc trình kiểm tra kiểu (như mypy
) sẽ báo lỗi.
Mục đích của Literal
-
Tăng tính an toàn trong lập trình: tránh nhập nhầm giá trị
-
Tăng tự động gợi ý (autocomplete) trong IDE
-
Rất hữu ích khi kết hợp với
TypedDict
, đặc biệt trong hệ thống như LangGraph, Pydantic, FastAPI, v.v.
from typing import Literal
DrinkType = Literal["coffee", "tea", "unknown"]
def order(drink: DrinkType):
print(f"You ordered: {drink}")
order("coffee") # ✅
order("beer") # ❌ IDE sẽ cảnh báo!
Ví dụ kết hợp Literal
+ TypedDict
from typing import TypedDict, Literal
# Định nghĩa một kiểu trạng thái đơn giản cho app chọn đồ uống
class DrinkState(TypedDict):
preference: Literal["coffee", "tea", "unknown"]
strength: Literal["light", "medium", "strong"]
# Trạng thái hợp lệ
state: DrinkState = {
"preference": "coffee",
"strength": "strong"
}
# Trạng thái sai (sẽ bị mypy hoặc IDE cảnh báo)
invalid_state: DrinkState = {
"preference": "beer", # ❌ không phải giá trị hợp lệ
"strength": "super strong" # ❌ không đúng literal
}
Không có bình luận