تقنية

cached_property في بايثون: هل تعيد الحساب إذا كانت القيمة None؟

قراءتان وعدادهما واحد
المخزن. [1] [2]

القيمة الفارغة ليست سمة غائبة. [1] [2]

الخلاصة السريعة

None تخزن؛ لا تعيد cached_property الجلب لمجرد هذه القيمة. [1] [2]

  • القراءة الأولى: None 1. [1] [2]
  • الثانية: None 1 أيضًا. [1] [2]
  • الحذف يزيل سمة الكائن المخزنة. [1] [2]
  • القراءة بعد الحذف: None 2. [1] [2]
  • اختبرنا 3.12.14 وفئة بقاموس سمات. [1] [2]

المثال

from functools import cached_property
class Own:
    def __init__(self):
        self.calls=0
    @cached_property
    def value(self):
        self.calls+=1
        return None
obj=Own()
print(obj.value,obj.calls)
print(obj.value,obj.calls)
del obj.value
print(obj.value,obj.calls)

[1] [2]

الموجود والغائب

المصدر هنا يستعمل علامة مستقلة لغياب القيمة. None ليست تلك العلامة؛ تحفظ النتيجة في obj.__dict__. بعد الحذف يغيب المفتاح، فتشغل القراءة التالية الجلب وتخزن النتيجة مجددًا. [1] [2]

حذف ثم قراءة وعدادهما اثنان
الحذف. [1] [2]

النطاق

العداد داخل دالة مؤلفة يكشف الاستدعاءات فقط. حذفنا سمة الكائن، لا الواصف في الفئة. لا نفحص التزامن أو الأداء، ولا نضمن استدعاءً واحدًا مع خيوط متعددة. [1] [2]

المراجع

  1. Python 3.12: cached_property
  2. CPython 3.12.14: functools.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.