
Annotatedλ μ²μ 보면 λ―μ€λ€.
λ¬Έλ²λ μμνκ³ , μμ΄λ μ½λκ° μ λμκ°λ€.
βνμ
ννΈλ§ μ¨λ λλ κ±° μλκ°?β
βμ΄κ±Έ μ κ΅³μ΄ μ¨μΌ νμ§?β
ν΅μ¬λΆν° λ§νλ©΄ Annotatedλ
νμ
μ λ°κΎΈλ κΈ°λ₯μ΄ μλλ€.
Annotateλ μμ΄λ‘ βμ£Όμμ λ¬λ€, λ©λͺ¨λ₯Ό λ¨κΈ°λ€βλΌλ λ».
μ± μ μ½μ λλ₯Ό λ μ¬λ €λ³΄μ.
Pythonμ Annotatedλ
λ°λ‘ μ΄ βλ©λͺ¨βλ₯Ό νμ
μ λΆμ΄λ λꡬλ€.
name: str = "jay"
βββββββββββββββββββ β π¦ μμ β β νμ : str β β λ΄μ©: "jay" β βββββββββββββββββββ
μ΄ μμλ
βλ¬Έμμ΄μ΄ λ€μ΄ μλ€βλ κ²λ§ μλ €μ€λ€.
from typing import Annotated
name: Annotated[str, "μ΄λ¦μ 50μ μ΄ν"] = "jay"
βββββββββββββββββββ β π¦ μμ β β νμ : str β β λ΄μ©: "jay" β βββββββββββββββββββ€ β π·οΈ μ€ν°μ»€ β β "μ΄λ¦μ 50μ μ΄ν" β βββββββββββββββββββ
μμ μμ λ΄μ©μ λ°λμ§ μμλ€.
λμ , μμμ μ€λͺ
μ€ν°μ»€κ° λΆμλ€.
from typing import Annotated
age: Annotated[int, "λμ΄λ 0 μ΄μ"] = 25
| κ΅¬μ± μμ | μλ―Έ |
|---|---|
| age | λ³μ μ΄λ¦ |
| Annotated[...] | μΆκ° μ λ³΄κ° λΆμ νμ |
| int | μ€μ νμ |
| "λμ΄λ 0 μ΄μ" | λ©λͺ¨(μ€ν°μ»€) |
| = 25 | κΈ°λ³Έκ° |
# λ¬Έμμ΄λ§ νμ©
name: Annotated[str, "μ΄λ¦"] = "jay"
# λ¬Έμμ΄ λλ None
name: Annotated[str | None, "μ΄λ¦"] = None
str | Noneμ
μ΄ ν¨ν΄μ
μ ν μ
λ ₯κ°μμ μμ£Ό μμ£Ό λ±μ₯νλ€.
FastAPIμμλ
Annotatedμ βμ€ν°μ»€ μ리βμ
Query, Path, Header κ°μ κ°μ²΄κ° λ€μ΄κ°λ€.
from typing import Annotated
from fastapi import Query
q: Annotated[str | None, Query(max_length=50)] = None
μ΄ μ½λλ₯Ό μ½μ΄λ³΄λ©΄,
qλ λ¬Έμμ΄μ΄κ±°λ Noneμ΄κ³ ,
Query κ²μ¦μΌλ‘ μ΅λ 50μκΉμ§ νμ©νλ©°,
κΈ°λ³Έκ°μ Noneμ΄λ€
@app.get("/items/")
async def read_items(
q: str | None = Query(default=None, max_length=50)
):
return {"q": q}
λ¬Έμ μ :
@app.get("/items/")
async def read_items(
q: Annotated[str | None, Query(max_length=50)] = None
):
return {"q": q}
q: Annotated[str | None, Query(max_length=50)] = None β β β β β β β β β ββ κΈ°λ³Έκ° β β β ββ κ²μ¦ κ·μΉ (μ€ν°μ»€) β β ββ μ€μ νμ β ββ Annotated μ μΈ ββ λ³μλͺ
| κ°λ | μλ―Έ |
|---|---|
| Annotated | νμ μ λ©ν μ 보λ₯Ό λΆμ΄λ λꡬ |
| 첫 λ²μ§Έ μΈμ | μ€μ νμ |
| λ λ²μ§Έ μΈμ | μΆκ° μ 보 (Query, Path λ±) |
| κΈ°λ³Έκ° | = λ‘ λ³λ μ§μ |
μ²μλΆν° μλ²½ν μ΄ν΄νλ € νμ§ λ§κ³ ,
κ·Έλ¦¬κ³ νμν μ΅μ μ κ·Έλκ·Έλ μ°Ύμμ λΆμ΄μ.