المزخرف Property
جزء من قسم Object Oriented Programming في رحلة Python على Coddy — الدرس 10 من 64.
يتيح لك المزيّن @property الوصول إلى الأساليب (methods) كما لو كانت كائنات (attributes)، مما يوفر طريقة نظيفة للحصول على القيم وتعيينها. يُعد هذا مفيدًا للتغليف (encapsulation)، حيث يتيح لك إضافة منطق للتحقق من الصحة أو قيم محسوبة دون تغيير الواجهة العامة للـ class الخاص بك.
إليك مثالاً على كلاس يستخدم @property:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@property
def area(self):
return 3.14159 * self._radius ** 2لاحظ أننا نستخدم self._radius لتخزين القيمة الفعلية. إذا استخدمنا self.radius داخل الـ getter، فسيؤدي ذلك إلى استدعاء دالة الـ getter مرة أخرى، مما يؤدي إلى تكرار لا نهائي (infinite recursion).
قم بإنشاء دائرة والوصول إلى الخصائص:
my_circle = Circle(5)قم بالوصول إلى الخصائص كأنها سمات العادية:
print(my_circle.radius)
print(my_circle.area)المخرجات:
5
78.53975لاحظ أنك لا تستخدم الأقواس () عند الوصول إلى الخصائص - فهي تبدو مثل السمات ولكنها تقوم بتشغيل كود الميثود.
أضف `setter` للسماح بتغيير القيم مع التحقق من صحتها:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@radius.setter
def radius(self, value):
if value > 0:
self._radius = value
else:
print("Radius must be positive!")الآن يمكنك ضبط الـ `radius` كأنه خاصية (attribute):
my_circle = Circle(5)
my_circle.radius = 10 # Uses the setter
print(my_circle.radius) # Uses the getterالمخرجات:
10نقطة رئيسية: يجعل @property الطرق (methods) تبدو وكأنها سمات (attributes)، بينما يتيح لك @property_name.setter التحكم في كيفية تعيين القيم، مما يُمكّن من التحقق من صحة البيانات والكبسلة (encapsulation).
جرّب بنفسك
لا يتضمّن هذا الدرس تحدّيًا برمجيًا.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Object Oriented Programming
1أساسيات OOP
الملفات الخارجيةمقدمة في OOPClasses مقابل Objectsمعامل selfMethodsAttributesدالة البناء (__init__)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسيةدالة ()superإعادة تعريف الدوال (Method Overriding)الوراثة المتعددةترتيب استدعاء الدوال (Method Resolution Order)مراجعة - هيكلية الموظفين5تعدد الأشكال
مراجعة إعادة تعريف الدوالمفهوم Duck Typingالأصناف والدوال المجردةتصميم الواجهاتملخص - حاسبة الأشكال