property() واصف خاصية
آخر تحديث: 2026-09-22
property() واصف خاصية
يغلّف property(fget, fset, fdel, doc) الدوال في كائن يمكن الوصول إليه كخاصية؛ ويمكن أيضًا استخدام المزيّن @property.
| التصنيف | الدوال المدمجة |
|---|---|
| النوع | دالة مدمجة |
| إصدار بايثون | all |
📝 الصياغة
property(fget[, fset[, fdel[, doc]]])
⚙️ المعاملات
| fget اختياري | Function for getting the attribute value (getter).(القيمة الافتراضية:None) |
|---|---|
| fset اختياري | Function for setting the attribute value (setter).(القيمة الافتراضية:None) |
| fdel اختياري | Function for deleting the attribute (deleter).(القيمة الافتراضية:None) |
| doc اختياري | Docstring for the property.(القيمة الافتراضية:None) |
القيمة المُعادة:A property object, a data descriptor accessed like a normal attribute.
▶ مثال
عدّل الكود واضغط تشغيل لرؤية النتيجة في لوحة المخرجات:
المخرجات:
10
🏷️ دوال مدمجة ذات صلة
💡 حالات ذات صلة
المزيد من الحالات قادم قريباً — تابعونا.
❓ أسئلة شائعة
Qما فائدة property؟
Aيحوّل أسلوبًا إلى وصول خاصية: obj.x يُشغّل منطق getter بلا أقواس، ويمكن التحقق عند الإسناد (عبر setter)، محققًا «الخصائص المحسوبة» والتغليف.
Qكيف يعملان @property و @x.setter معًا؟
A@property يُعرّف منطق القراءة و@x.setter تحقق الإسناد، مثل c.x = 10 يمر عبر setter؛ إذا عُرف @property فقط دون setter، فالإسناد يُثير AttributeError: can't set attribute.
Qما الفرق بين property والأسلوب العادي؟
Aأسلوب الوصول يختلف (obj.x بدل obj.x())، ويمكن لـ property اعتراض العمليات الثلاث: القراءة والإسناد والحذف — مناسب لتغليف الحقول الداخلية والتحقق منها.
Qهل تخزن الخاصية المحسوبة النتيجة مؤقتًا؟
Aلا، الوصول إلى obj.x يعيد تنفيذ getter في كل مرة؛ لتخزين النتيجة مؤقتًا عليك تنفيذها بنفسك (مثل functools.cached_property).