بهبود typing در Python 3.15؛ کنترل دقیق‌تر TypedDict بر key‌های اضافی

چرا مهم است

اگر تو با dictionary‌هایی کار می‌کنی که ساختار مشخصی دارند، این تغییر کمک می‌کند محدودیت key‌های اضافی را دقیق‌تر بیان کنی. دیگر پذیرش مقدارهای اضافی و ممنوع‌کردن کامل آن‌ها دو خواستهٔ مبهم نیستند.

قبل از خواندن، این‌ها را بدان۳ مفهوم
TypedDict

روشی در typing برای توصیف ساختار یک dictionary که در آن نام key‌ها و type مقدار هرکدام مشخص می‌شود.

بیشتر درباره این مفهوم

extra_items

یک class parameter برای TypedDict که type مجاز مقدارهای مربوط به key‌های اضافی را مشخص می‌کند.

بیشتر درباره این مفهوم

closed

یک class parameter برای TypedDict که با مقدار True، وجود key‌های اضافی را مستقل از type مقدارشان ممنوع می‌کند.

بیشتر درباره این مفهوم

مقالهٔ Rodrigo Girão Serrão به تغییرات typing در Python 3.15 می‌پردازد. بخش در دسترس، روی دو class parameter جدید TypedDict تمرکز دارد: extra_items و closed. این دو امکان مشخص می‌کنند که یک dictionary با ساختار تعریف‌شده، چه برخوردی با key‌های اضافی داشته باشد.

با extra_items می‌توان اجازه داد dictionary علاوه بر key‌های مشخص‌شده، key‌های دیگری هم داشته باشد؛ به شرطی که مقدار آن‌ها با type تعیین‌شده سازگار باشد. در مثال مقاله، Movie یک TypedDict با title از نوع str و year از نوع int است و با extra_items=str تعریف می‌شود. بنابراین اضافه‌کردن genre با مقدار «Comedy / Romance» مجاز است، چون مقدار این key از نوع str است. این محدودیت برای مقدارهای اضافی است و تعریف جداگانهٔ year به‌عنوان int را تغییر نمی‌دهد.

در مقابل، اگر قرار باشد هیچ key اضافی پذیرفته نشود، می‌توان هنگام تعریف TypedDict از closed=True استفاده کرد. در این حالت، ممنوعیت به type مقدار وابسته نیست: key اضافی، با هر نوع مقداری، خارج از ساختار مجاز خواهد بود.

مقاله در معرفی تغییرات Python 3.15، اضافه‌شدن typing.TypeForm و decorator با نام typing.disjoint_base را هم ذکر می‌کند، اما بخش ارائه‌شده توضیحی دربارهٔ کاربرد یا رفتار آن‌ها ندارد. نکتهٔ اصلی این بخش، امکان بیان دقیق‌تر سیاست پذیرش key‌های اضافی در TypedDict برای static type hinting است.

نکته کلیدی

برای TypedDict اول مشخص کن که key اضافی می‌خواهی یا نه. اگر می‌خواهی، با extra_items نوع مقدارش را تعیین کن؛ اگر نمی‌خواهی، closed=True را به کار ببر و این دو سیاست را با هم اشتباه نگیر.

خواندن مقاله اصلی (در زبانه‌ی جدید باز می‌شود)
برچسب‌ها (۳)