الخلاصة السريعة
False من hasattr لا يثبت غياب تعريف property؛ قد ترفع دالة جلبها AttributeError. [1] [2]
- hasattr(c,"score") يشغل الجلب؛ خطؤنا المعلن يعطي False. [1] [2]
- getattr_static(c,"score") يعيد كائن property دون تشغيل الجلب. [1] [2]
- فحص isinstance(p,property) يعطي True؛ ليس هذا قيمة score المحسوبة. [1] [2]
- إذا رفع الجلب ValueError، ينتشر الخطأ عبر hasattr. [1] [2]
- جربنا 3.12.14 وفئة عادية؛ البحث المخصص والسمات الديناميكية خارج المثال. [1] [2]
المثال
from inspect import getattr_static
class C:
@property
def score(self):
raise AttributeError("pending")
c=C()
print(hasattr(c,"score"))
p=getattr_static(c,"score")
print(isinstance(p,property))الناتج: False ثم True. [1] [2]
التفسير
hasattr يحاول جلب السمة ويعالج AttributeError. تعريف الخاصية موجود؛ فشل الجلب لا ينفيه. [1] [2]
الفحص الثابت
p هو الواصف نفسه. استرجاعه لم يحسب score؛ العثور عليه لا يثبت نجاح دالة الجلب. [1] [2]
نوع الخطأ
إذا رفع الجلب ValueError بدل AttributeError، فلا نحصل على False؛ ينتشر الاستثناء. [1] [2]

النطاق
فئة عادية في 3.12.14؛ لا نجعل الفحص الثابت بديلًا مطابقًا لكل بحث ديناميكي. [1] [2]
المراجع
- Python: الفحص الثابت للسمات
- Python: hasattr وproperty
- موضوع تك: لغة بايثون — مفردات
- موضوع تك: تطبيقات بايثون — مفردات
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
