"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > تعلم أساليب بايثون السحرية: شرح بسيط

تعلم أساليب بايثون السحرية: شرح بسيط

تم النشر بتاريخ 2024-08-18
تصفح:535

Learn Python Magic Methods: A Simple Explanation

فهم الأساليب السحرية في بايثون

الطرق السحرية في بايثون، والمعروفة أيضًا باسم طرق dunder (لأنها تحتوي على شرطات سفلية مزدوجة في بداية ونهاية أسمائها)، تسمح لنا بتحديد سلوك كائناتنا لمختلف العمليات. إنها تتيح السلوك المخصص ويمكن أن تجعل فصولنا تعمل مثل الأنواع المضمنة. في هذه المدونة، سنستكشف فئات مختلفة من الأساليب السحرية ونقدم شرحًا تفصيليًا ونعطي أمثلة عملية وحالات استخدام.

1. طرق الوصول إلى السمات

تتحكم هذه الأساليب السحرية في كيفية الوصول إلى سمات كائناتك أو تعديلها أو حذفها.

__getattr__ و __getattribute__

  • __getattr__: يتم الاتصال به عندما لا يتم العثور على سمة في كائن.

  • __getattribute__: يتم الاتصال به دون قيد أو شرط للوصول إلى أي سمة.

مثال: الوصول إلى السمات المخصصة مع التسجيل

class LoggedAttributes:
    def __init__(self, name):
        self.name = name

    def __getattr__(self, item):
        print(f"Accessing non-existent attribute: {item}")
        return None

    def __getattribute__(self, item):
        print(f"Getting attribute: {item}")
        return super().__getattribute__(item)

# Usage
obj = LoggedAttributes("Alice")
print(obj.name)  # Output: Getting attribute: name\nAlice
print(obj.age)   # Output: Accessing non-existent attribute: age\nNone

حالة الاستخدام العملي: تسجيل الوصول إلى السمات في سيناريو تصحيح الأخطاء لتتبع متى وكيف يتم الوصول إلى السمات أو تعديلها.

__setattr__ و __delattr__

  • __setattr__: يتم الاتصال به عند محاولة تعيين السمة.

  • __delattr__: يتم استدعاؤه عند محاولة حذف السمة.

مثال: تعديل السمة المخصصة مع التحقق من الصحة

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __setattr__(self, key, value):
        if key == "age" and value 



حالة الاستخدام العملي: فرض قواعد أو قيود التحقق من الصحة عند تعيين السمات أو حذفها.

2. طرق الحاوية

تسمح هذه الأساليب السحرية لكائناتك بالتصرف مثل الحاويات (القوائم، والقواميس، وما إلى ذلك).

__len__، __getitem__، __setitem__، __delitem__، و __iter__

  • __len__: إرجاع طول الحاوية.

  • __getitem__: استرداد عنصر في فهرس أو مفتاح معين.

  • __setitem__: تعيين عنصر في فهرس أو مفتاح معين.

  • __delitem__: حذف عنصر في فهرس أو مفتاح معين.

  • __iter__: إرجاع كائن مكرر.

مثال: كائن يشبه القائمة المخصصة

class CustomList:
    def __init__(self):
        self._items = []

    def __len__(self):
        return len(self._items)

    def __getitem__(self, index):
        return self._items[index]

    def __setitem__(self, index, value):
        self._items[index] = value

    def __delitem__(self, index):
        del self._items[index]

    def __iter__(self):
        return iter(self._items)

    def append(self, item):
        self._items.append(item)

# Usage
cl = CustomList()
cl.append(1)
cl.append(2)
cl.append(3)
print(len(cl))  # Output: 3
print(cl[1])    # Output: 2
for item in cl:
    print(item)  # Output: 1 2 3

حالة الاستخدام العملي: إنشاء فئة مجموعة مخصصة تحتاج إلى سلوك متخصص أو طرق إضافية مع الاستمرار في دعم عمليات القائمة القياسية.

3. الطرق الرقمية وطرق المقارنة

تحدد هذه الأساليب كيفية تفاعل كائنات صفك مع العمليات الرقمية والمقارنات.

الطرق الرقمية

  • __add__, __sub__, __mul__, __truediv__, __floordiv__, __mod__, __pow__: تحديد العمليات الحسابية.

مثال: فئة الأرقام المركبة المخصصة

class Complex:
    def __init__(self, real, imag):
        self.real = real
        self.imag = imag

    def __add__(self, other):
        return Complex(self.real   other.real, self.imag   other.imag)

    def __sub__(self, other):
        return Complex(self.real - other.real, self.imag - other.imag)

    def __repr__(self):
        return f"({self.real}   {self.imag}i)"

# Usage
c1 = Complex(1, 2)
c2 = Complex(3, 4)
print(c1   c2)  # Output: (4   6i)
print(c1 - c2)  # Output: (-2   -2i)

حالة الاستخدام العملي: تنفيذ أنواع رقمية مخصصة مثل الأعداد المركبة أو المتجهات أو المصفوفات.

طرق المقارنة

  • __eq__، __ne__، __lt__، __le__، __gt__، __ge__: تحديد عمليات المقارنة.

مثال: تنفيذ الطلب الإجمالي لفئة مخصصة

from functools import total_ordering

@total_ordering
class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author

    def __eq__(self, other):
        return (self.title, self.author) == (other.title, other.author)

    def __lt__(self, other):
        return (self.title, self.author) 



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

4. طرق الحاوية: حالة الاستخدام العملي

قاموس مخصص بمفاتيح غير حساسة لحالة الأحرف

إنشاء كائن يشبه القاموس يعامل المفاتيح على أنها غير حساسة لحالة الأحرف.

مثال: قاموس حساس لحالة الأحرف

class CaseInsensitiveDict:
    def __init__(self):
        self._data = {}

    def __getitem__(self, key):
        return self._data[key.lower()]

    def __setitem__(self, key, value):
        self._data[key.lower()] = value

    def __delitem__(self, key):
        del self._data[key.lower()]

    def __contains__(self, key):
        return key.lower() in self._data

    def keys(self):
        return self._data.keys()

    def items(self):
        return self._data.items()

    def values(self):
        return self._data.values()

# Usage
cid = CaseInsensitiveDict()
cid["Name"] = "Alice"
print(cid["name"])  # Output: Alice
print("NAME" in cid)  # Output: True

حالة الاستخدام العملي: إنشاء قواميس حيث يجب التعامل مع المفاتيح على أنها غير حساسة لحالة الأحرف، ومفيدة للتعامل مع مدخلات المستخدم، وإعدادات التكوين، وما إلى ذلك.

خاتمة

توفر الأساليب السحرية طريقة قوية لتخصيص سلوك الكائنات الخاصة بك في بايثون. إن فهم هذه الأساليب واستخدامها بفعالية يمكن أن يجعل فصولك الدراسية أكثر سهولة وتتكامل بسلاسة مع وظائف وعوامل تشغيل Python المضمنة. سواء كنت تقوم بتنفيذ أنواع رقمية مخصصة، أو حاويات، أو أنماط الوصول إلى السمات، يمكن للطرق السحرية أن تعزز بشكل كبير مرونة ووظائف التعليمات البرمجية الخاصة بك

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/tapstechie/learn-python-magic-methods-a-simple-explanation-21ap?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3