أسئلة مقابلات Data Model & Object Protocols في Python
10 سؤال عن Data Model & Object Protocols من مسار Python. اقرأ الإجابة المختصرة لكل سؤال هنا، وافتح السؤال للشرح الكامل والأمثلة والأخطاء الشائعة والمصادر.
- متقدم
ما العلاقة بين __eq__ و __hash__ في Python؟
إذا تساوى كائنان وفق __eq__ فيجب أن يكون لهما نفس hash. وتعريف __eq__ وحده يجعل Python تضبط __hash__ على None فيصبح الكائن غير hashable، ويجب ألا تتغير الحقول الداخلة في الـ hash ما دام الكائن مفتاحًا في dict أو عنصرًا في set.
اقرأ الشرح الكامل - متوسط
ما الفرق بين shallow copy و deep copy؟
النسخ السطحي ينشئ حاوية جديدة لكن عناصرها الداخلية هي نفس الكائنات، أما النسخ العميق فينسخ شجرة الكائنات بالكامل بشكل تعاودي مع التعامل مع المراجع الدائرية.
اقرأ الشرح الكامل - مبتدئ
ما الفرق بين iterable و iterator؟
الـ iterable كائن يمكن الحصول منه على iterator عبر iter() (مثل list)، أما الـ iterator فيحفظ موضعه ويعيد العنصر التالي عبر next() ويُستهلك مرة واحدة فقط.
اقرأ الشرح الكامل - متوسط
كيف تقلل generators و yield استهلاك الذاكرة؟
الـ generator ينتج القيم عند الطلب واحدة تلو الأخرى بدل بناء collection كاملة، فتبقى الذاكرة ثابتة تقريبًا مهما كبر حجم البيانات.
اقرأ الشرح الكامل - متوسط
ما البروتوكول الذي يجعل الكائن قابلًا للاستخدام في حلقة for؟
يجب أن يعرّف الكائن __iter__ تعيد iterator، والـ iterator يعرّف __next__ التي تعيد العنصر التالي وترمي StopIteration عند النهاية (ويعرّف __iter__ تعيد self).
اقرأ الشرح الكامل - متوسط
متى تستخدم property بدل getter و setter صريحين؟
تسمح property بعرض قيمة محسوبة أو محمية بالتحقق عبر صيغة attribute عادية، ويمكنك البدء بـ attribute بسيطة ثم تحويلها إلى property لاحقًا دون كسر الواجهة.
اقرأ الشرح الكامل - مبتدئ
ماذا يقدم الديكوريتور @dataclass؟
يولّد تلقائيًا __init__ و __repr__ و __eq__ (واختياريًا ترتيبًا و hash وتجميدًا) بناءً على الحقول المعلنة بـ type annotations.
اقرأ الشرح الكامل - متقدم
ما فائدة __slots__ وما التنازلات المرتبطة بها؟
تحدد __slots__ قائمة ثابتة من الـ attributes وتلغي __dict__ لكل instance، مما يقلل الذاكرة ويسرّع الوصول قليلًا، لكنها تمنع إضافة attributes ديناميكية وتعقّد الوراثة.
اقرأ الشرح الكامل - متقدم
كيف يعمل MRO و super() مع الوراثة المتعددة؟
يحدد MRO (المحسوب بخوارزمية C3) ترتيب البحث عن الدوال عبر الـ classes، و super() لا تستدعي الأب المباشر بالضرورة بل الـ class التالي في MRO للكائن الفعلي.
اقرأ الشرح الكامل - متوسط
ما البروتوكول الذي يطبقه context manager؟
يعرّف الكائن __enter__ (للتهيئة وإرجاع القيمة المرتبطة بـ as) و __exit__ (للتنظيف)، أو يُبنى بسهولة عبر contextlib.contextmanager، وتضمن with استدعاء التنظيف حتى عند حدوث استثناء.
اقرأ الشرح الكامل