Property Decorators
جزء من قسم البرمجة كائنية التوجه في رحلة Python على Coddy. الدرس 14 من 64.
تتيح لك مزخرفات property التحكم في كيفية الوصول إلى السمات وتعديلها، مع الحفاظ على صيغة السمات البسيطة.
إليك مثالًا على class مع getter لـ property:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._ageاستخدم property مثل attribute عادي:
person = Person("Alice", 30)
print(person.age)المخرجات:
30لاحظ أنك تصل إلى age من دون أقواس، رغم أنه يستدعي في الواقع أسلوبًا.
أضف setter لإجراء validation للبيانات عند تعيين values:
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يمكنك الآن تعيين age مع validation تلقائي:
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 الأساليب تبدو مثل attribute. استخدم @property من أجل getter و@attribute_name.setter من أجل setter. يتيح ذلك إجراء validation للبيانات وحساب values مع الحفاظ على صيغة الوصول البسيطة إلى attribute.
التحدي
متوسطأكمل الفئة Temperature في temperature.py التي تحوّل بين Celsius وFahrenheit. ثم استخدم هذه الفئة في driver.py لاختبار تحويلات درجات الحرارة. اتبع تعليقات TODO في كلا الملفين للحصول على التعليمات خطوة بخطوة.
اطبع كل تحويل بالتنسيق [celsius]°C is [fahrenheit]°F، مع إبقاء قيمة Celsius تمامًا كما أُعطيت، وقيمة Fahrenheit كما يحسبها Python. لا تقرّب الأرقام ولا تنسّقها. السطران اللذان ينتجهما برنامج التشغيل هما:
25°C is 77.0°F
37.0°C is 98.6°Fجرّب بنفسك
# TODO: استيراد فئة Temperature من الوحدة temperature
# اختبر الفئة:
# TODO: أنشئ كائن Temperature عند 25°C
temp = None # استبدل بكائن Temperature فعلي
# TODO: اطبع قيمتي السيليزيوس والفهرنهايت
# TODO: استخدم التنسيق: "25.0°C is 77.0°F"
# TODO: عيّن درجة الحرارة إلى 98.6°F
# TODO: اطبع القيمتين مرة أخرى للتأكد من عمل التحويل
# TODO: استخدم نفس التنسيق كما سبقيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1أساسيات OOP
الملفات الخارجيةمقدمة في OOPClasses مقابل Objectsمعامل selfMethodsAttributesدالة البناء (__init__)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسيةدالة ()superإعادة تعريف الدوال (Method Overriding)الوراثة المتعددةترتيب استدعاء الدوال (Method Resolution Order)مراجعة - هيكلية الموظفين5تعدد الأشكال
مراجعة إعادة تعريف الدوالمفهوم Duck Typingالأصناف والدوال المجردةتصميم الواجهاتملخص - حاسبة الأشكال3خصائص الـ Class
متغيرات الـ Instance مقابل متغيرات الـ ClassProperty Decoratorsالسمات الخاصةمراجعة - مدير الحساب البنكيتدرّب بنفسك: مترجم Python عبر الإنترنت