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__
تخصيص عمليات المقارنة < و > لترتيب الكائنات.
التطبيق العملي المباشر
تحدي الدرس الرابع: مكتبة كاملة بالدوال السحرية
قم بالتعديل على الكود بداخل المحرر أدناه لتطبيق المتطلبات التالية:
- أضف الخاصية
pagesإلى الـ Constructor (__init__) لتخزين عدد الصفحات. - أضف دالة
__len__تُرجع عدد الصفحات، لتسمح باستخدامlen(book). - أضف دالة
__eq__لمقارنة كتابين بناءً على العنوان والمؤلف معاً. - أضف دالة
__add__تُرجع مجموع صفحات كتابين عند استخدامbook1 + book2. - أنشئ 3 كتب:
book1،book2، وbook3(نسخة مكررة من book1). - اختبر كل الدوال السحرية باستخدام
print()وenumerate()على قائمة الكتب.
⏳ جارٍ تحميل المحرر التفاعلي...