تقنية

kw_only في dataclass: هل يفرض تمرير الحقل الافتراضي؟

Packet(7,"leaf") ترفع TypeError.
الموضعية ترفض.

kw_only=True تحدد تمرير الوسائط بأسمائها؛ لا تلغي افتراضي label في Packet. [1]

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

لا؛ يمكن حذف label من استدعائنا. [1]

  • kw_only=True تحدد تمرير الوسائط بأسمائها؛ لا تلغي افتراضي label في Packet. [1]
  • على CPython 3.12.14، Packet تعرف number دون افتراضي، وlabel بافتراضي bud؛ نستخدم kw_only=True. [1]
  • Packet(7,"leaf") ترفع TypeError؛ تمرير قيم مرتبة موضعيًا لا يحقق شرط تسمية الوسائط. [1]
  • Packet(number=7,label="leaf") تنجح؛ number هي 7 وlabel هي leaf. [1]
  • تحكم: Packet(number=7) تنجح وتعطي label القيمة bud. الشرط يحدد طريقة تمرير الوسيط، ولا يزيل افتراضيه هنا. نختبر تهيئة مولدة دون وراثة أو تخصيص. [1]

التسمية والافتراضي

kw_only=True تحدد تمرير الوسائط بأسمائها؛ لا تلغي افتراضي label في Packet. [1]

حقلا المثال

على CPython 3.12.14، Packet تعرف number دون افتراضي، وlabel بافتراضي bud؛ نستخدم kw_only=True. [1]

رفض الموضعية

Packet(7,"leaf") ترفع TypeError؛ تمرير قيم مرتبة موضعيًا لا يحقق شرط تسمية الوسائط. [1]

from dataclasses import dataclass @dataclass(kw_only=True) class Packet: number:int label:str="bud" try:Packet(7,"leaf") except TypeError:print("TypeError") [1]

في Packet(number=7) تبقى label بالقيمة bud.
الافتراضي يبقى.

التسمية والتحكم

Packet(number=7,label="leaf") تنجح؛ number هي 7 وlabel هي leaf. [1]

own=Packet(number=7,label="leaf") print(own.number,own.label) control=Packet(number=7) print(control.label) [1]

تحكم: Packet(number=7) تنجح وتعطي label القيمة bud. الشرط يحدد طريقة تمرير الوسيط، ولا يزيل افتراضيه هنا. نختبر تهيئة مولدة دون وراثة أو تخصيص. [1]

المراجع

  1. Python dataclass kw_only

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

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