1. متقدم

    ما العلاقة بين __eq__ و __hash__ في Python؟

    إذا تساوى كائنان وفق __eq__ فيجب أن يكون لهما نفس hash. وتعريف __eq__ وحده يجعل Python تضبط __hash__ على None فيصبح الكائن غير hashable، ويجب ألا تتغير الحقول الداخلة في الـ hash ما دام الكائن مفتاحًا في dict أو عنصرًا في set.

    اقرأ الشرح الكامل
  2. متوسط

    ما الفرق بين shallow copy و deep copy؟

    النسخ السطحي ينشئ حاوية جديدة لكن عناصرها الداخلية هي نفس الكائنات، أما النسخ العميق فينسخ شجرة الكائنات بالكامل بشكل تعاودي مع التعامل مع المراجع الدائرية.

    اقرأ الشرح الكامل
  3. مبتدئ

    ما الفرق بين iterable و iterator؟

    الـ iterable كائن يمكن الحصول منه على iterator عبر iter() (مثل list)، أما الـ iterator فيحفظ موضعه ويعيد العنصر التالي عبر next() ويُستهلك مرة واحدة فقط.

    اقرأ الشرح الكامل
  4. متوسط

    كيف تقلل generators و yield استهلاك الذاكرة؟

    الـ generator ينتج القيم عند الطلب واحدة تلو الأخرى بدل بناء collection كاملة، فتبقى الذاكرة ثابتة تقريبًا مهما كبر حجم البيانات.

    اقرأ الشرح الكامل
  5. متوسط

    ما البروتوكول الذي يجعل الكائن قابلًا للاستخدام في حلقة for؟

    يجب أن يعرّف الكائن __iter__ تعيد iterator، والـ iterator يعرّف __next__ التي تعيد العنصر التالي وترمي StopIteration عند النهاية (ويعرّف __iter__ تعيد self).

    اقرأ الشرح الكامل
  6. متوسط

    متى تستخدم property بدل getter و setter صريحين؟

    تسمح property بعرض قيمة محسوبة أو محمية بالتحقق عبر صيغة attribute عادية، ويمكنك البدء بـ attribute بسيطة ثم تحويلها إلى property لاحقًا دون كسر الواجهة.

    اقرأ الشرح الكامل
  7. مبتدئ

    ماذا يقدم الديكوريتور ‎@dataclass؟

    يولّد تلقائيًا __init__ و __repr__ و __eq__ (واختياريًا ترتيبًا و hash وتجميدًا) بناءً على الحقول المعلنة بـ type annotations.

    اقرأ الشرح الكامل
  8. متقدم

    ما فائدة __slots__ وما التنازلات المرتبطة بها؟

    تحدد __slots__ قائمة ثابتة من الـ attributes وتلغي __dict__ لكل instance، مما يقلل الذاكرة ويسرّع الوصول قليلًا، لكنها تمنع إضافة attributes ديناميكية وتعقّد الوراثة.

    اقرأ الشرح الكامل
  9. متقدم

    كيف يعمل MRO و super() مع الوراثة المتعددة؟

    يحدد MRO (المحسوب بخوارزمية C3) ترتيب البحث عن الدوال عبر الـ classes، و super() لا تستدعي الأب المباشر بالضرورة بل الـ class التالي في MRO للكائن الفعلي.

    اقرأ الشرح الكامل
  10. متوسط

    ما البروتوكول الذي يطبقه context manager؟

    يعرّف الكائن __enter__ (للتهيئة وإرجاع القيمة المرتبطة بـ as) و __exit__ (للتنظيف)، أو يُبنى بسهولة عبر contextlib.contextmanager، وتضمن with استدعاء التنظيف حتى عند حدوث استثناء.

    اقرأ الشرح الكامل