تقنية

metadata في dataclass: هل تنفذ شرط الحد الأدنى تلقائيًا؟

own.count بعد Entry(-3) هي -3.
العدد السالب محفوظ.

metadata لا تنفذ شرط min في مثالنا؛ dataclasses لا تستخدمها للتحقق. [1]

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

لا؛ القيمة السالبة تقبلها التهيئة هنا. [1]

  • metadata لا تنفذ شرط min في مثالنا؛ dataclasses لا تستخدمها للتحقق. [1]
  • على CPython 3.12.14، Entry تعرف count بـfield(metadata={"min":0})؛ min مفتاح من اختيارنا. [1]
  • own=Entry(-3) تنجح؛ own.count هي -3 رغم min=0. [1]
  • minimum المقروءة من fields(Entry)[0].metadata["min"] هي 0؛ بيانات الحقل بقيت محفوظة. [1]
  • فحصنا check المستدعى صراحة بعد الإنشاء يرفض own بـValueError، ويقبل تحكم Entry(3) بـTrue. نختبر حقلًا واحدًا دون تهيئة مخصصة. [1]

البيانات والتنفيذ

metadata لا تنفذ شرط min في مثالنا؛ dataclasses لا تستخدمها للتحقق. [1]

مفتاح اختياري

على CPython 3.12.14، Entry تعرف count بـfield(metadata={"min":0})؛ min مفتاح من اختيارنا. [1]

قيمة دون الحد

own=Entry(-3) تنجح؛ own.count هي -3 رغم min=0. [1]

from dataclasses import dataclass,field,fields @dataclass class Entry:count:int=field(metadata={"min":0}) own=Entry(-3) minimum=fields(Entry)[0].metadata["min"] print(own.count,minimum) [1]

check(own) ترفع ValueError.
الفحص الصريح يرفضه.

القراءة والفحص

minimum المقروءة من fields(Entry)[0].metadata["min"] هي 0؛ بيانات الحقل بقيت محفوظة. [1]

def check(value): if value.count<minimum:raise ValueError("min") return True try:check(own) except ValueError:print("ValueError") control=Entry(3) print(check(control),control.count) [1]

فحصنا check المستدعى صراحة بعد الإنشاء يرفض own بـValueError، ويقبل تحكم Entry(3) بـTrue. نختبر حقلًا واحدًا دون تهيئة مخصصة. [1]

المراجع

  1. Python field metadata

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

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