Nhảy đến nội dung chính

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
}