تقنية

field في dataclass: هل تجمع default وdefault_factory؟

field مع default وdefault_factory ترفع ValueError.
الجمع مرفوض.

field ترفض الجمع بين default وdefault_factory؛ اختر طريقة واحدة للقيمة الافتراضية. [1]

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

لا؛ field بالخيارين ترفع ValueError في اختبارنا. [1]

  • field ترفض الجمع بين default وdefault_factory؛ اختر طريقة واحدة للقيمة الافتراضية. [1]
  • على CPython 3.12.14، make بلا وسائط؛ تعيد leaf وتسجل make في calls. نقترح bud قيمة افتراضية. [1]
  • field(default="bud",default_factory=make) ترفع ValueError أثناء استدعاء field نفسها. [1]
  • calls تبقى []؛ المصنع لم يستدع في المحاولة المرفوضة. [1]
  • تحكم Box تحدد المصنع وحده: control=Box() تحمل tag=leaf والسجل ["make"]. تعريف الفئة وحده لم يستدع المصنع؛ إنشاء المثيل استدعاه مرة. نستخدم تهيئة مولدة وحقلًا واحدًا. [1]

بديلان للافتراضي

field ترفض الجمع بين default وdefault_factory؛ اختر طريقة واحدة للقيمة الافتراضية. [1]

المصنع والقيمة

على CPython 3.12.14، make بلا وسائط؛ تعيد leaf وتسجل make في calls. نقترح bud قيمة افتراضية. [1]

رفض الجمع

field(default="bud",default_factory=make) ترفع ValueError أثناء استدعاء field نفسها. [1]

from dataclasses import dataclass,field calls=[] def make():calls.append("make");return "leaf" try:field(default="bud",default_factory=make) except ValueError:print("ValueError") print(calls) [1]

control.tag بعد Box() هي leaf.
المصنع وحده يعمل.

السجل والتحكم

calls تبقى []؛ المصنع لم يستدع في المحاولة المرفوضة. [1]

@dataclass class Box:tag:str=field(default_factory=make) control=Box() print(control.tag,calls) [1]

تحكم Box تحدد المصنع وحده: control=Box() تحمل tag=leaf والسجل ["make"]. تعريف الفئة وحده لم يستدع المصنع؛ إنشاء المثيل استدعاه مرة. نستخدم تهيئة مولدة وحقلًا واحدًا. [1]

المراجع

  1. Python field defaults

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

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