تقنية

fields في بايثون: هل تعد كل مدخلات dataclass؟

القائمة تعرض tag دون seed
الحقول. [1] [2]

قائمة الحقول ليست قائمة مدخلات التهيئة. [1] [2]

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

لا؛ يستبعد fields متغير التهيئة InitVar ولو كان مطلوبًا. [1] [2]

  • عرفنا حقل tag ومتغير seed من InitVar. [1] [2]
  • تعطي أسماء الحقول ['tag'] فقط. [1] [2]
  • لا يظهر seed ضمنها. [1] [2]
  • يبقى مطلوبًا؛ Row('bud') يرفع TypeError. [1] [2]
  • اختبرنا 3.12.14 بتهيئة مولدة. [1] [2]

المثال

from dataclasses import (
 dataclass, fields, InitVar)
@dataclass
class Row:
 tag: str
 seed: InitVar[int]
print([f.name for f in fields(Row)])
try:
 Row('bud')
except TypeError:
 print('TypeError')

[1] [2]

التهيئة والحقول

المصدر هنا يستبعد الحقول الظاهرية من fields، لكنه يضم InitVar إلى معاملات التهيئة. المخرجان ['tag'] ثم TypeError. تمرير Row('bud',7) ينجح؛ عدم ظهور seed لا يلغي المدخل. [1] [2]

التهيئة تحتاج seed رغم استبعاده
المدخل. [1] [2]

النطاق

في مثالنا لا قيمة افتراضية لـseed. إضافتها تسمح بحذفه من الاستدعاء، لكنه يظل خارج fields. لا نختبر تهيئة مخصصة أو وراثة، ولا تثبت التعليقات النوعية فحص النوع وقت التشغيل. [1] [2]

المراجع

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

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

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