تكرار السؤال: …
الإجابة المختصرة
Any يعطّل الفحص؛ يقبل أي قيمة ويسمح بأي عملية عليها. أما object فيقبل أي قيمة أيضًا لكنه لا يسمح باستدعاء عمليات خاصة عليها إلا بعد تضييق النوع.
الشرح
Any "معدٍ": أي قيمة مشتقة منه تصبح Any وتختفي الأخطاء حتى وقت التشغيل. استخدم object عندما تقبل دالتك أي شيء لكنها لا تعرف عنه شيئًا (مثل دوال التسجيل)، واستخدم Any فقط عند التكامل مع كود غير موصوف أو أثناء ترحيل تدريجي. وتساعد إعدادات strict في mypy أو Pyright على كشف انتشار Any الضمني.
مثال بالكود
from typing import Any
def log_any(value: Any) -> None:
value.foo() # لا خطأ — الفحص معطل
def log_obj(value: object) -> None:
value.foo() # mypy: "object" has no attribute "foo"
if isinstance(value, str):
print(value.upper()) # مقبول بعد التضييقأخطاء شائعة
- استخدام Any كحل سريع لكل خطأ نوع فيفقد المشروع فائدة الفحص.
- استخدام dict[str, Any] لتمثيل بيانات معروفة الشكل بدل TypedDict أو dataclass.