تقنية

ترتيب حقول dataclass العادية: هل يأتي المطلوب بعد الافتراضي؟

Bad default then required: TypeError.
الافتراضي قبل المطلوب.

في تهيئة dataclass المولدة، الحقول العادية غير المقتصرة على الكلمات المفتاحية لا تسمح بمطلوب بعد افتراضي. [1]

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

لا، مع هذه الحقول العادية. [1]

  • في تهيئة dataclass المولدة، الحقول العادية غير المقتصرة على الكلمات المفتاحية لا تسمح بمطلوب بعد افتراضي. [1]
  • على CPython 3.12.14، Bad تعرف label:str="bud" ثم number:int دون افتراضي؛ نستعمل @dataclass دون خيارات. [1]
  • تطبيق المزخرف على Bad يرفع TypeError؛ الخطأ يحدث عند تعريف الفئة، قبل إنشاء مثيل. [1]
  • تحكم: Fixed تعرف number:int أولًا ثم label:str="bud"؛ تعريفها ينجح. [1]
  • control=Fixed(4) تنجح: control.number هي 4، وcontrol.label هي bud؛ حذف الوسيط الثاني يستخدم افتراضيه. نختبر تهيئة مولدة دون وراثة أو حقول مقتصرة على الكلمات المفتاحية. [1]

نطاق قاعدة الترتيب

في تهيئة dataclass المولدة، الحقول العادية غير المقتصرة على الكلمات المفتاحية لا تسمح بمطلوب بعد افتراضي. [1]

الافتراضي أولًا

على CPython 3.12.14، Bad تعرف label:str="bud" ثم number:int دون افتراضي؛ نستعمل @dataclass دون خيارات. [1]

خطأ أثناء التعريف

تطبيق المزخرف على Bad يرفع TypeError؛ الخطأ يحدث عند تعريف الفئة، قبل إنشاء مثيل. [1]

from dataclasses import dataclass try: @dataclass class Bad: label:str="bud" number:int except TypeError:print("TypeError") [1]

Fixed required then default: 4 bud.
المطلوب قبل الافتراضي.

تقديم المطلوب والتحكم

تحكم: Fixed تعرف number:int أولًا ثم label:str="bud"؛ تعريفها ينجح. [1]

@dataclass class Fixed: number:int label:str="bud" control=Fixed(4) print(control.number,control.label) [1]

control=Fixed(4) تنجح: control.number هي 4، وcontrol.label هي bud؛ حذف الوسيط الثاني يستخدم افتراضيه. نختبر تهيئة مولدة دون وراثة أو حقول مقتصرة على الكلمات المفتاحية. [1]

المراجع

  1. Python dataclass field order

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

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