1. νμ ννΈ(type hint)
1. νμμ±
νμ΄μ¬μ λμ νμ
μΈμ΄λ‘ λ³μμ νμ
μ λͺ
μνμ§ μμλ μ€ν κ°λ₯νλ€.
νμ§λ§ νλ‘μ νΈ κ·λͺ¨κ° 컀μ§κ³ νμ
μΈμμ΄ λ§μμ§μλ‘ νμ
λΆνμ€μ±μΌλ‘ μΈν μ€λ₯κ° λ°μν κ°λ₯μ±μ΄ 컀μ§λ€.
def total(price, count):
return price * count
total("1000", 3) # → '100010001000'
μλ₯Ό λ€μ΄, μμ μ½λλ int * int λ₯Ό μμνμ§λ§, λ¬Έμμ΄μ΄ λ€μ΄μ€λ©΄ κ°λ°μμ μλμ λ€λ₯΄κ² ν¨μκ° λμν μ μλ€.
νμ ννΈλ₯Ό μ¬μ©νλ©΄, νμ μ λν μ€λ₯λ₯Ό μ€μΌ μ μλ€.
2. λ¬Έλ²
1. κΈ°λ³Έ νμ
λ³μ_μ΄λ¦: λ³μ_νμ μΌλ‘ μ μΈνλ€.
ν¨μ μΈμμλ λμΌνκ² μ€μ νλ©°, λ°ν κ°μ -> λ€μ νμνλ€.
name: str = "pasa"
age: int = 27
height: float = 175.5
is_active: bool = True
def greet(name: str) -> str:
return f"Hello, {name}"
2. 리μ€νΈ, νν, μΈνΈ
λ³μ_μ΄λ¦: μλ£ν[λ΄λΆ_νμ ] μΌλ‘ μ μΈνλ€.
numbers: list[int] = [1, 2, 3]
tags: set[str] = {"python", "fastapi"}
user_info: tuple[str, int] = ("pasa", 27)
scores: dict[str, int] = {"math": 90, "eng": 85}
3. Optional, Union
λ³μκ° Noneμ κ°μ§ μ μλ κ²½μ° -> Optional
μ¬λ¬ νμ μ κ°μ§ μ μλ κ²½μ° -> Union
Union
# Python 3.9 μ΄μ λ²μ
from typing import Optional
def greet(name: Optional[str]) -> str:
return f"Hello, {name or 'Guest'}"
# Python 3.10 μ΄μ λ²μ
def greet(name: str | None) -> str:
return f"Hello, {name or 'Guest'}"
Optional
# Python 3.9 μ΄μ λ²μ
from typing import Union
def parse_id(id: Union[int, str]) -> str:
return str(id)
# Python 3.10 μ΄μ λ²μ
def parse_id(id: int | str) -> str:
return str(id)
2. μ λλ¦ νμ
νμ ννΈλ§μΌλ‘λ κ³ μ λ νμ λ§ νν κ°λ₯νλ€.
νμ§λ§ λ€μν νμ μ μ μ°νκ² λ€λ£¨κ³ μΆλ€λ©΄ μ λλ¦(Generic)μ μ¬μ©ν μ μλ€.
1. μ λλ¦μ νμ©ν λ²μ© ν¨μ
def echo_str(x: str) -> str:
return x
echo_str(1)
μμ ν¨μλ λ¬Έμμ΄ μ΄μΈμ κ°μ λ£μΌλ©΄ μ μ νμ κ²μ¬μμ μλ¬λ₯Ό μΆλ ₯νλ€.
νμ§λ§ μ λλ¦μ μ¬μ©νλ©΄, νμ ννΈλ₯Ό μ’λ μμ λ‘κ² μ¬μ©ν μ μλ€.
from typing import TypeVar
T = TypeVar('T') # Tλ μ무 νμ
μ΄λ κ°λ₯νλ€λ
def echo(x: T) -> T:
return x
echo(1)
2. μ λλ¦μ νμ©ν ν΄λμ€
from typing import Generic, TypeVar
content = TypeVar('content', int, str) # Tλ int λλ strλ§ κ°λ₯
class Box(Generic[content]):
def __init__(self, value: content):
self.value: content = value
def get(self) -> content:
return self.value
μμλ int, strμ μ μ₯ν μ μλ Box ν΄λμ€μ΄λ€.
int_box = Box(42) # Tλ int
str_box = Box("hello") # Tλ str
print(int_box.get()) # 42
print(str_box.get()) # hello
float_box = Box(3.14)
print(float_box.get()) # λ¬Όλ‘ 3.14λ‘ μΆλ ₯μ λλ€.
3. Pydantic μ¬μ©
API μλ΅ λͺ¨λΈμ μμ£Ό νμ©ν μ μλ€.
from pydantic import BaseModel
from typing import TypeVar, Generic
T = TypeVar('T')
class ResponseModel(BaseModel, Generic[T]):
status: str
data: T
μ΄μ λ€μν νμ μ μλ΅ λͺ¨λΈμ μλμ κ°μ΄ λ§λ€ μ μλ€.
class User(BaseModel):
name: str
age: int
response = ResponseModel[User](status="ok", data=User(name="pasa", age=27))
μ΄λ° λ°©μμΌλ‘ μ λλ¦μ νμ©νλ©΄,
- ResponseModel[str], ResponseModel[User], ResponseModel[list[int]] λ± μ μ°νκ² μμ± κ°λ₯
- API λ¬Έμ μλν λꡬμμλ μ νν νμ μ΄ λ°μλ¨
'π Python' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ΄νν°λΈ νμ΄μ¬ 8μ₯ - κ°κ±΄μ±κ³Ό μ±λ₯ (0) | 2025.04.09 |
---|---|
μ΄νν°λΈ νμ΄μ¬ 7μ₯ - λμμ±κ³Ό λ³λ ¬μ± (0) | 2025.04.01 |
μ΄νν°λΈ νμ΄μ¬ 6μ₯ - λ©νν΄λμ€μ μ νΈλ¦¬λ·°νΈ (0) | 2025.03.30 |
μ΄νν°λΈ νμ΄μ¬ 5μ₯ - ν΄λμ€μ μΈν°νμ΄μ€ (0) | 2025.03.21 |
μ΄νν°λΈ νμ΄μ¬ 3μ₯ - ν¨μ (0) | 2025.03.17 |