تكرار السؤال: …
الإجابة المختصرة
لا؛ الـ annotations بيانات وصفية تقرؤها أدوات التحليل الساكن مثل mypy و Pyright، ولا تمنع Python تمرير قيمة من نوع مختلف وقت التشغيل.
الشرح
تُخزن الـ annotations في __annotations__ ويمكن قراءتها برمجيًا، ولهذا تستخدمها مكتبات مثل Pydantic و FastAPI للتحقق وقت التشغيل، لكن هذا سلوك المكتبة وليس اللغة. استخدم type checker في CI مع الاختبارات، وضع validation صريحًا عند حدود النظام (طلبات HTTP، ملفات المستخدم، متغيرات البيئة). ومنذ Python 3.14 تُقيّم الـ annotations بشكل مؤجل (PEP 649) فلا تحتاج غالبًا إلى from __future__ import annotations.
مثال بالكود
def total(prices: list[float]) -> float:
return sum(prices)
total(["1", "2"]) # لا خطأ من Python نفسها
# TypeError فقط عند sum، ويكتشفه mypy قبل التشغيل:
# error: List item 0 has incompatible type "str"أخطاء شائعة
- الاعتماد على type hints كبديل عن التحقق من مدخلات المستخدم.
- إضافة annotations دون تشغيل type checker في CI فتتقادم دون أن يلاحظ أحد.