Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

المزخرف 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).

جرّب بنفسك

لا يتضمّن هذا الدرس تحدّيًا برمجيًا.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming