ClassVar مستبعدة من حقول dataclass؛ لا تصبح وسيطًا في تهيئتنا المولدة. [1]
الخلاصة السريعة
لا؛ kind ليست وسيط تهيئة هنا. [1]
- ClassVar مستبعدة من حقول dataclass؛ لا تصبح وسيطًا في تهيئتنا المولدة. [1]
- على CPython 3.12.14، Box تعرف number:int وkind:ClassVar[str]="bud"؛ نستورد ClassVar مباشرة من typing. [1]
- Box(4,kind="leaf") ترفع TypeError؛ تمرير kind باسمها لا يجعلها وسيطًا مقبولًا. [1]
- أسماء حقول fields(Box) تضم number فقط؛ Box.kind تبقى bud على الفئة، رغم استبعادها من الحقول. [1]
- تحكم Plain تعرف kind:str="bud" حقلًا عاديًا؛ Plain(4,kind="leaf") تنجح، وcontrol.kind هي leaf. نختبر تهيئة مولدة بلا وراثة أو تخصيص. [1]
متغير الفئة والحقول
ClassVar مستبعدة من حقول dataclass؛ لا تصبح وسيطًا في تهيئتنا المولدة. [1]
التعليق في المثال
على CPython 3.12.14، Box تعرف number:int وkind:ClassVar[str]="bud"؛ نستورد ClassVar مباشرة من typing. [1]
رفض الوسيط
Box(4,kind="leaf") ترفع TypeError؛ تمرير kind باسمها لا يجعلها وسيطًا مقبولًا. [1]
from dataclasses import dataclass,fields from typing import ClassVar @dataclass class Box: number:int kind:ClassVar[str]="bud" try:Box(4,kind="leaf") except TypeError:print("TypeError") print([item.name for item in fields(Box)],Box.kind) [1]

الحقول والتحكم
أسماء حقول fields(Box) تضم number فقط؛ Box.kind تبقى bud على الفئة، رغم استبعادها من الحقول. [1]
@dataclass class Plain: number:int kind:str="bud" control=Plain(4,kind="leaf") print(control.number,control.kind) [1]
تحكم Plain تعرف kind:str="bud" حقلًا عاديًا؛ Plain(4,kind="leaf") تنجح، وcontrol.kind هي leaf. نختبر تهيئة مولدة بلا وراثة أو تخصيص. [1]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
