قم بضبط سلوك فصولك الدراسية باستخدام آلية التجاوز المرنة في Python.
في Python، توفر الفئات وسيلة نظيفة لتجميع البيانات والوظائف معًا في عناصر قابلة لإعادة الاستخدام. يتيح لك إنشاء فئات مخصصة نمذجة كيانات العالم الحقيقي مثل المستخدمين والمنتجات والموظفين.
تحدد فئات Python الأساليب السحرية التي يمكنك تخصيصها للسماح لك بتشكيل سلوك فئاتك في المواقف الفريدة.
فهم الطرق السحرية
تخيل الأساليب السحرية، والتي تسمى أيضًا أساليب dunder، مثل التعويذات السرية أو الأناشيد المخفية التي تستدعيها Python تلقائيًا عند تنفيذ إجراءات معينة على كائن ما.
توفر Python الكثير من السلوكيات المضمنة للفصول الدراسية من خلالها الأساليب سبيل المثال، ثابتة، والطبقة. أنت تستطيع إنشاء فئات بايثونوتخصيصها بشكل أكبر باستخدام الأساليب السحرية.
الأساليب السحرية هي أساليب مثيلة في بايثون تحتوي على شرطتين سفليتين (__طريقة__) قبل وبعد اسم الطريقة.
تعطي هذه الأساليب الخاصة تعليمات لبيثون حول كيفية التعامل مع كائنات الفئة. فيما يلي بعض الأساليب السحرية شائعة الاستخدام في فئات بايثون:
- __gt__: تتحقق هذه الطريقة مما إذا كان أحد الكائنات أكبر من الآخر.
- __فيه__: يتم تشغيل هذه الطريقة عند إنشاء مثيل لفئة، وهي مخصصة بشكل أساسي لتهيئة السمة.
- __str__: يؤدي هذا إلى إرجاع تمثيل سلسلة للفئة التي تصف الكائن.
- __repr__: توفر هذه الطريقة مخرجات تسمح لك بإعادة إنشاء الكائن باستخدام تقييم ().
- __لين__: عند استخدام لين () دالة على كائن، تُرجع هذه الطريقة طول الكائن.
- __مكافئ__: تتيح هذه الطريقة المقارنة بين الكائنات باستخدام القيمة المزدوجة التي تساوي (==) المشغل أو العامل.
- __lt__: ينفذ مقارنة أقل من (
- __يضيف__: عند استخدام الإضافة (+) العامل على الكائنات التي تعمل هذه الطريقة وتنفذ عمليات الإضافة.
- __تحصل على البند__: يسمح لك باسترداد العناصر من كائن باستخدام بناء جملة الفهرس، مثل كائن [مفتاح].
تنفيذ الطرق السحرية
أفضل طريقة لفهم الأساليب السحرية هي استخدامها.
تمثيل السلسلة للكائن
يمكنك تخصيص تمثيل السلسلة لكائن ما لسهولة القراءة أو لمزيد من المعالجة.
classPerson:
def__init__(self, name, age):
self.name = name
self.age = age
p1 = Person('John', 25)
print(p1)
هنا لديك بسيطة شخص فئة مع __فيه__ الطريقة السحرية لتهيئته. عندما تقوم بطباعة ص1 الكائن، فإنه يستخدم تمثيل السلسلة الافتراضية التي توفرها بايثون.
لتخصيص تمثيل السلسلة، حدد __str__ و __repr__ الطرق السحرية:
classPerson:
def__init__(self, name, age, height):
self.name = name
self.age = age
self.height = heightdef__str__(self):
returnf'{self.name} is {self.age} years old'def__repr__(self):
returnf'{self.name} is {self.age} years old'
p1 = Person('John', 25, 78)
print(p1)
الآن لديك تمثيل سلسلة أكثر قابلية للقراءة وشمولاً لـ ص1 هدف:
خاصية طول الكائن
تخيل أنه عندما تتصل بـ لين () طريقة كائن شخص، وتريد ارتفاعها. تنفيذ __لين__ الطريقة السحرية لل شخص فصل:
classPerson:
def__init__(self, name, age, height):
self.name = name
self.age = age
self.height = heightdef__str__(self):
returnf'{self.name} is {self.age} years old'def__repr__(self):
returnf'{self.name} is {self.age} years old'def__len__(self):
return self.height
p2 = Person('Issac', 25, 89)
print(len(p2))
ال __لين__ تقوم الطريقة السحرية بإرجاع سمة الارتفاع لـ a شخص مثال. عندما تتصل لين (ص 2)، سوف يستدعي __لين__ الطريقة السحرية تلقائيًا والتي تُرجع ارتفاع الملف ص2 هدف.
التعامل مع المقارنة بين الكائنات
إذا كنت بحاجة إلى مقارنة كائنات فئة ما بناءً على خصائص معينة للفئة. يمكنك تحديد __مكافئ__ الطريقة السحرية وتنفيذ منطق المقارنة الخاص بك.
classPerson:
def__init__(self, name, age, height):
self.name = name
self.age = age
self.height = heightdef__str__(self):
returnf'{self.name} is {self.age} years old'def__repr__(self):
returnf'{self.name} is {self.age} years old'def__len__(self):
return self.heightdef__eq__(self, other):
return self.name == other.name and self.age == other.agep1 = Person('John', 25, 56)
p2 = Person('John', 25, 61)
print(p1 == p2)
ال __مكافئ__ يقارن الأسلوب اسم و عمر صفات الاثنين الشخص كائنات لتحديد المساواة.
المزدوج يساوي (==) يستخدم عامل التشغيل هذه الطريقة للتحقق من المساواة بدلاً من مقارنة الهويات. إذن اثنان شخص تكون المثيلات متساوية إذا كانت تحتوي على سمات الاسم والعمر المتطابقة. يتيح لك هذا تجاوز سلوك التحقق من المساواة الافتراضي لفصلك المخصص.
من خلال تطبيق هذه الأساليب السحرية، يمكنك تحديد السلوك المخصص الذي سيكون متسقًا مع مكونات Python المضمنة.
الأساليب السحرية المتقدمة
فيما يلي بعض الأمثلة المتقدمة لاستخدام الأساليب السحرية لتخصيص الفئات.
جعل الفصول الدراسية تتصرف مثل الحاويات
باستخدام الأساليب السحرية، يمكنك تحديد الفئات التي تتصرف مثل الحاويات. يمكنك استخدام حاويات، مثل الصفوفلتخزين مجموعات من عناصر البيانات. أنها توفر أساليب مختلفة لمعالجة العناصر المضمنة والوصول إليها وتكرارها.
classPerson:
def__init__(self):
self.data = []def__len__(self):
return len(self.data)def__getitem__(self, index):
return self.data[index]def__setitem__(self, index, value):
self.data[index] = valuedef__delitem__(self, index):
del self.data[index]p1 = Person()
p1.data = [10, 2, 7]
print(len(p1)) # 3
p1[0] = 5
print(p1[0]) # 5
الآن يمكن لكائن الشخص أن يتصرف كحاوية:
تخصيص الوصول إلى السمات
باستخدام __getattr__ الطريقة السحرية يمكنك تخصيص سمات طريقة شخص يتم الوصول إلى الفصل بناءً على شروط معينة.
classPerson:
def__getattr__(self, name):
if name == 'age':
return40
else:
raise AttributeError(f'No attribute {name}')
p1 = Person()
print(p1.age) # 40
ال __getattr__ سيتم تشغيل الطريقة عند محاولة الوصول إلى سمة غير موجودة مباشرة في الكائن. في هذه الحالة، فإنه يتحقق مما إذا كان اسم السمة عمر ويعود 40.
بالنسبة لأي اسم سمة آخر، فإنه يرفع خطأ في السمة مع الرسالة المقابلة.
جعل الفصول تتصرف مثل القابلة للاستدعاء
ال __يتصل__ تسمح لك الطريقة بمعاملة مثيل الفئة ككائن قابل للاستدعاء (أي دالة).
classAdder:
def__call__(self, x, y):
return x + y
adder = Adder()
print(adder(2, 3)) # 5
عندما تقوم بإنشاء مثيل لـ الأفعى ثم نسميها بالحجج، __يتصل__ يتم تشغيل الطريقة وتنفيذ عملية الإضافة قبل إرجاع النتيجة.
التحميل الزائد على المشغل
باستخدام الأساليب السحرية، يمكنك إجراء التحميل الزائد للمشغل. يسمح لك التحميل الزائد للمشغل بتحديد السلوكيات المخصصة للمشغلين المضمنين عند استخدامها مع مثيلات الفئات الخاصة بك. فيما يلي مثال شائع يشرح التحميل الزائد للمشغل.
classVector:
def__init__(self, x, y):
self.x = x
self.y = ydef__add__(self, other):
if isinstance(other, Vector):
new_x = self.x + other.x
new_y = self.y + other.y
return Vector(new_x, new_y)
else:
raise TypeError("Unsupported operand type for +")def__str__(self):
returnf"({self.x}, {self.y})"# Creating two Vector instances
v1 = Vector(2, 3)
v2 = Vector(1, 4)# Adding two Vector instances using the + operator
v3 = v1 + v2
# Printing the result
print(v3) # Output: (3, 7)
والنتيجة هي ناقل جديد:
ال المتجه الطبقة تحدد __يضيف__ الطريقة، التي تعمل عند استخدام + عامل بين مثيلين من الفئة. تضيف الطريقة المكونات المقابلة للمتجهين وترجع ملفًا جديدًا المتجه المثال مع النتيجة.
لقد رأيت هنا الأساليب السحرية الأساسية التي يمكنك تنفيذها لتخصيص سلوك صفك. لدى بايثون العديد من الأساليب السحرية التي توفر المزيد من المرونة عند إنشاء الفئات. الرجوع إلى الوثائق الرسمية للحصول على قائمة كاملة.
البرمجة الشيئية في بايثون
توفر الأساليب السحرية في Python طرقًا قوية لتخصيص سلوك الفئات وتحسينه. تتوافق الأساليب السحرية مع مفهوم البرمجة الشيئية (OOP) في بايثون. لذلك من المهم أن نفهم مفهوم OOP عند محاولة استخدام الأساليب السحرية.