Property Decorators
جزء من قسم البرمجة كائنية التوجه في رحلة Python على Coddy. الدرس 14 من 64.
تتيح لك مُزيّنات الخصائص التحكم في كيفية الوصول إلى السمات وتعديلها، مع الحفاظ على صياغة السمات البسيطة.
إليك مثالًا على فئة تحتوي على خاصية ذات مُعترِف جالب:
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 من دون أقواس، رغم أنه في الواقع يستدعي طريقة.
أضف مُعيِّنًا للتحقق من صحة البيانات عند تعيين القيم:
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 # يستخدم دالة الضبط مع التحقق من صحة القيمة
print(person.age) # يستخدم دالة الحصول على القيمة
# سيؤدي هذا إلى حدوث خطأ:
# 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 للـ getters و@attribute_name.setter للـ setters. يتيح ذلك التحقق من صحة البيانات وحساب القيم مع الحفاظ على صياغة بسيطة للوصول إلى السمات.
التحدي
متوسطأكمل الفئة Temperature في temperature.py لتحويل درجات الحرارة بين سلسيوس وفهرنهايت. ثم استخدم هذه الفئة في driver.py لاختبار تحويلات درجات الحرارة. اتبع تعليقات TODO في كلا الملفين للحصول على تعليمات خطوة بخطوة.
اطبع كل تحويل بالتنسيق [celsius]°C is [fahrenheit]°F، مع إبقاء قيمة سلسيوس كما أُعطيت تمامًا، وقيمة فهرنهايت كما تحسبها Python. لا تقرّب الأرقام ولا تنسّقها. السطران اللذان ينتجهما برنامج التشغيل هما:
25°C is 77.0°F
37.0°C is 98.6°Fجرّب بنفسك
# TODO: استورد الصنف Temperature من الوحدة temperature
# اختبر الصنف:
# TODO: أنشئ مثيلًا لدرجة حرارة مقدارها 25°C
temp = None # استبدله بمثيل فعلي من Temperature
# TODO: اطبع القيمتين بالسلسيوس والفهرنهايت
# TODO: استخدم التنسيق: "25°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 عبر الإنترنت