تایپینگ پیشرفته در پایتون (Union Types, TypeAlias, TypedDict, Callable)
تایپینگ در پایتون به ما کمک میکند تا نوع دادههای ورودی و خروجی توابع را مشخص کنیم و به خوانایی، نگهداری و دیباگ کد کمک میکند. از نسخه 3.10 به بعد، سینتکس تایپینگ سادهتر و قابلفهمتر شده است. در این بخش با چند قابلیت تایپینگ پیشرفته آشنا میشویم.
Union Types (نوعهای اتحادی)
وقتی یک مقدار میتواند چند نوع مختلف داشته باشد، از Union استفاده میکنیم. در پایتون 3.10+ میتوان به جای Union[int, str]
، از سینتکس سادهتر int | str
استفاده کرد.
def process(value: int | str) -> None:
if isinstance(value, int):
print("Number:", value)
else:
print("Text:", value)
process(10)
process("hello")
TypeAlias (تعریف نام مستعار برای تایپ)
گاهی میخواهیم یک تایپ پیچیده را با نامی کوتاهتر و قابل فهمتر تعریف کنیم. برای این کار از TypeAlias
استفاده میکنیم.
from typing import TypeAlias
UserId: TypeAlias = int | str
def get_user(user_id: UserId) -> None:
print("Fetching user with ID:", user_id)
get_user(123)
get_user("abc")
TypedDict (تایپ دیکشنریهای ساختارمند)
اگر دیکشنری ما ساختار مشخصی دارد و میخواهیم کلیدها و نوع مقادیر آن را تعیین کنیم، از TypedDict
استفاده میکنیم.
from typing import TypedDict
class User(TypedDict):
id: int
name: str
is_active: bool
def print_user(user: User) -> None:
print(f"User {user['name']} (ID: {user['id']}) is", "active" if user["is_active"] else "inactive")
print_user({"id": 1, "name": "Ali", "is_active": True})
Callable (تایپ توابع به عنوان آرگومان)
وقتی میخواهیم یک تابع را به عنوان پارامتر به تابع دیگری بدهیم و نوع ورودی و خروجی آن تابع را مشخص کنیم، از Callable
استفاده میکنیم.
from typing import Callable
def apply_func(x: int, func: Callable[[int], int]) -> int:
return func(x)
def square(n: int) -> int:
return n * n
result = apply_func(5, square)
print(result) # خروجی: 25
جمعبندی
تایپینگ پیشرفته در پایتون باعث میشود کد خواناتر و قابل اطمینانتر باشد و در زمان توسعه و دیباگ خطاها را سریعتر پیدا کنیم. استفاده از سینتکس جدید مانند int | str
و list[int]
کار با تایپها را راحتتر و طبیعیتر کرده است.