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

Property Decorators

جزء من قسم Object Oriented Programming في رحلة Python على Coddy — الدرس 14 من 64.

تتيح لك مزخرفات الخصائص (Property decorators) التحكم في كيفية الوصول إلى السمات وتعديلها، مع الحفاظ على صيغة السمات البسيطة.

إليك مثال على فئة (class) تحتوي على أداة جلب الخصائص (property getter):

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age

استخدم الخاصية كسمة عادية:

person = Person("Alice", 30)
print(person.age)

الناتج:

30

لاحظ أنك تصل إلى age بدون أقواس، على الرغم من أنها تستدعي طريقة (method) في الواقع.

أضف دالة تعيين (setter) للتحقق من صحة البيانات عند تعيين القيم:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age
    
    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative")
        self._age = value

الآن يمكنك تعيين العمر مع التحقق التلقائي من الصحة:

person = Person("Alice", 30)
person.age = 31     # يستخدم الـ setter مع التحقق من الصحة
print(person.age)   # يستخدم الـ getter

# سيؤدي هذا إلى حدوث خطأ:
# person.age = -5   # ValueError: لا يمكن أن يكون العمر سالباً

الناتج:

31

أنشئ خصائص محسوبة تقوم بحساب القيم:

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    @property
    def area(self):
        return self.width * self.height

rect = Rectangle(5, 3)
print(rect.area)  # يحسب 5 * 3 = 15

المخرجات:

15

نقطة رئيسية: تجعل مزخرفات الخصائص (Property decorators) الأساليب تبدو كسمات. استخدم @property للمسترجعات (getters) و @attribute_name.setter للمعينات (setters). يسمح هذا بالتحقق من صحة البيانات والقيم المحسوبة مع الحفاظ على صيغة وصول بسيطة للسمات.

challenge icon

التحدي

متوسط

أكمل فئة Temperature في temperature.py التي تقوم بالتحويل بين Celsius و Fahrenheit. ثم استخدم هذه الفئة في driver.py لاختبار تحويلات درجات الحرارة. اتبع تعليقات TODO في كلا الملفين للحصول على تعليمات خطوة بخطوة.

ورقة مرجعية

تسمح لك مزخرفات الخصائص (Property decorators) بالتحكم في كيفية الوصول إلى السمات وتعديلها مع الحفاظ على صيغة سمات بسيطة.

استخدم @property لطرق الحصول (getter methods):

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age

person = Person("Alice", 30)
print(person.age)  # الوصول إليها مثل السمة، بدون أقواس

استخدم @attribute_name.setter لطرق التعيين (setter methods) مع التحقق من الصحة:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age
    
    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative")
        self._age = value

person = Person("Alice", 30)
person.age = 31  # يستخدم طريقة التعيين مع التحقق من الصحة

إنشاء خصائص محسوبة تقوم بحساب القيم:

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    @property
    def area(self):
        return self.width * self.height

rect = Rectangle(5, 3)
print(rect.area)  # يحسب 5 * 3 = 15

جرّب بنفسك

# TODO: استيراد فئة Temperature من وحدة temperature

# اختبار الفئة:
# TODO: إنشاء مثيل لدرجة الحرارة عند 25 درجة مئوية
temp = None  # استبدله بمثيل Temperature الفعلي

# TODO: طباعة قيم كل من السيلزيوس والفهرنهايت
# TODO: استخدم التنسيق: "25.0°C is 77.0°F"

# TODO: ضبط درجة الحرارة على 98.6 فهرنهايت

# TODO: طباعة القيمتين مرة أخرى للتأكد من أن التحويل يعمل
# TODO: استخدم نفس التنسيق السابق
quiz iconاختبر نفسك

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

جميع دروس Object Oriented Programming