تقنية

field(default=None) في dataclass: هل يعني غياب الافتراضي؟

Box().item is None: True.
حذف الوسيط مقبول.

None قيمة افتراضية صحيحة؛ field(default=None) تختلف عن field() دون افتراضي. [1]

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

لا؛ None هنا قيمة، وليست غيابًا للافتراضي. [1]

  • None قيمة افتراضية صحيحة؛ field(default=None) تختلف عن field() دون افتراضي. [1]
  • على CPython 3.12.14، Box تعرف item:object=field(default=None)؛ نستخدم تهيئة مولدة. [1]
  • own=Box() تنجح دون وسيط؛ own.item هي None. غياب الوسيط يستعمل الافتراضي المحدد. [1]
  • تحكم Plain تعرف item:object=field() دون افتراضي؛ Plain() ترفع TypeError لأن وسيط الحقل مطلوب. [1]
  • control=Plain(None) تنجح، وcontrol.item هي None؛ تمرير القيمة يختلف عن حذف الوسيط. own.item تبقى None. نختبر حقلًا واحدًا دون وراثة أو مصنع أو تهيئة مخصصة. [1]

قيمة مقابل غيابها

None قيمة افتراضية صحيحة؛ field(default=None) تختلف عن field() دون افتراضي. [1]

افتراضي معلن

على CPython 3.12.14، Box تعرف item:object=field(default=None)؛ نستخدم تهيئة مولدة. [1]

حذف الوسيط

own=Box() تنجح دون وسيط؛ own.item هي None. غياب الوسيط يستعمل الافتراضي المحدد. [1]

from dataclasses import dataclass,field @dataclass class Box:item:object=field(default=None) own=Box() print(own.item is None) [1]

Plain() without default: TypeError.
حذف الوسيط مرفوض.

حقل مطلوب وتحكم

تحكم Plain تعرف item:object=field() دون افتراضي؛ Plain() ترفع TypeError لأن وسيط الحقل مطلوب. [1]

@dataclass class Plain:item:object=field() try:Plain() except TypeError:print("TypeError") control=Plain(None) print(control.item is None) [1]

control=Plain(None) تنجح، وcontrol.item هي None؛ تمرير القيمة يختلف عن حذف الوسيط. own.item تبقى None. نختبر حقلًا واحدًا دون وراثة أو مصنع أو تهيئة مخصصة. [1]

المراجع

  1. Python field default

للتوسع: لغات البرمجة.

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