NahdaAIنهضة
Python • المستوى الثالث • الدرس 4

الدوال السحرية الخاصة (Magic / Dunder Methods)

العودة لفهرس المستوى

أهداف الدرس العلمية

  • التعرف على Dunder Methods التي تبدأ وتنتهي بـ __.
  • تنسيق تحويل الكائنات إلى نصوص واضحة عبر __str__ و __repr__.
  • السماح باستخدام الدوال المدمجة len() على الكائنات عبر __len__.
  • تخصيص عمليات المقارنة == والجمع + على الكائنات.

1. ما هي Magic Methods؟

هي أساليب خاصة مدمجة في Python تُنفَّذ تلقائياً عند إجراء عمليات معينة على الكائن (مثل الطباعة print(obj)، الطول len(obj)، المقارنة obj1 == obj2، أو الجمع obj1 + obj2). تبدأ وتنتهي دائماً بـ __.

python
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):
        return f"({self.x}, {self.y})"

    def __add__(self, other):
        return Point(self.x + other.x, self.y + other.y)

p1 = Point(2, 3)
p2 = Point(5, 7)

print(p1)          # (2, 3) ← بسبب __str__
print(p1 + p2)     # (7, 10) ← بسبب __add__

2. أشهر الدوال السحرية في Python

📝 __str__

مخرجات صديقة للمستخدم عند استخدام print(obj) أو str(obj).

🔧 __repr__

تمثيل رسمي للمطورين، يُستخدم عند تنقيح الكود وفي console.

📏 __len__

يسمح باستخدام len(obj) لإرجاع عدد أو حجم معين.

⚖️ __eq__

تخصيص سلوك المقارنة obj1 == obj2.

➕ __add__

تخصيص عملية الجمع obj1 + obj2.

📊 __lt__, __gt__

تخصيص عمليات المقارنة < و > لترتيب الكائنات.

التطبيق العملي المباشر

تحدي الدرس الرابع: مكتبة كاملة بالدوال السحرية

قم بالتعديل على الكود بداخل المحرر أدناه لتطبيق المتطلبات التالية:

  1. أضف الخاصية pages إلى الـ Constructor (__init__) لتخزين عدد الصفحات.
  2. أضف دالة __len__ تُرجع عدد الصفحات، لتسمح باستخدام len(book).
  3. أضف دالة __eq__ لمقارنة كتابين بناءً على العنوان والمؤلف معاً.
  4. أضف دالة __add__ تُرجع مجموع صفحات كتابين عند استخدام book1 + book2.
  5. أنشئ 3 كتب: book1، book2، و book3 (نسخة مكررة من book1).
  6. اختبر كل الدوال السحرية باستخدام print() و enumerate() على قائمة الكتب.
⏳ جارٍ تحميل المحرر التفاعلي...