قائمة افتراضية مباشرة للحقل ترفضها dataclass؛ استخدم field(default_factory=list) لقائمة جديدة عند الحاجة إلى الافتراضي. [1]
الخلاصة السريعة
لا؛ تعريف مثالنا يرفع ValueError. [1]
- قائمة افتراضية مباشرة للحقل ترفضها dataclass؛ استخدم field(default_factory=list) لقائمة جديدة عند الحاجة إلى الافتراضي. [1]
- على CPython 3.12.14، نحاول تعريف Box بحقل items:list=[]؛ القائمة الافتراضية فارغة. [1]
- تطبيق المزخرف يرفع ValueError أثناء التعريف؛ لا ننشئ مثيلًا من Box. [1]
- تحكم Plain تستخدم field(default_factory=list)؛ control وother مثيلان أنشأناهما دون تمرير items، ولكل منهما قائمة فارغة مختلفة. [1]
- بعد control.items.append(2)، control.items تضم 2 وother.items تبقى فارغة. نختبر قائمة عادية ومصنع list وتهيئة مولدة؛ المصنع المخصص الذي يعيد قائمة مشتركة خارج المثال. [1]
قيمة أم مصنع؟
قائمة افتراضية مباشرة للحقل ترفضها dataclass؛ استخدم field(default_factory=list) لقائمة جديدة عند الحاجة إلى الافتراضي. [1]
القائمة المباشرة
على CPython 3.12.14، نحاول تعريف Box بحقل items:list=[]؛ القائمة الافتراضية فارغة. [1]
رفض التعريف
تطبيق المزخرف يرفع ValueError أثناء التعريف؛ لا ننشئ مثيلًا من Box. [1]
from dataclasses import dataclass,field try: @dataclass class Box:items:list=[] except ValueError:print("ValueError") [1]
![other.items after control append: [].](https://images.bahralolom.com/assets/local-2000-20261012/BA-1582/python-list-default-values.png)
المصنع والمثيلان
تحكم Plain تستخدم field(default_factory=list)؛ control وother مثيلان أنشأناهما دون تمرير items، ولكل منهما قائمة فارغة مختلفة. [1]
@dataclass class Plain:items:list=field(default_factory=list) control=Plain();other=Plain() print(control.items is other.items,control.items,other.items) control.items.append(2) print(control.items,other.items) [1]
بعد control.items.append(2)، control.items تضم 2 وother.items تبقى فارغة. نختبر قائمة عادية ومصنع list وتهيئة مولدة؛ المصنع المخصص الذي يعيد قائمة مشتركة خارج المثال. [1]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
