إعادة الإنشاء قد تغير الحقل المشتق. [1] [2]
الخلاصة السريعة
replace ينشئ كائنًا جديدًا؛ حقل init=False لا ينسخ من الأصل. [1] [2]
- نحسب y=2*x في __post_init__؛ ليس y وسيط التهيئة. [1] [2]
- a=C(4) يبدأ بـy=8؛ نعدل a.y=99 يدويًا. [1] [2]
- replace(a,x=5) يعطي b.x=5,b.y=10؛ يبقى a عند (4,99). [1] [2]
- replace(a,y=7) يرفع ValueError لأن y حقل init=False. [1] [2]
- جربنا 3.12.14 مع تهيئة مولدة وفئة قابلة للتعديل؛ التهيئة المخصصة خارج المثال. [1] [2]
المثال
from dataclasses import dataclass,field,replace
@dataclass
class C:
x:int
y:int=field(init=False)
def __post_init__(self):
self.y=2*self.x
a=C(4)
a.y=99
b=replace(a,x=5)
print(a.x,a.y,b.x,b.y)التفسير
تستدعي replace التهيئة. في فئتنا المولدة، تعمل __post_init__ فتحسب 2*5=10؛ لا تستعيد 99. الكائن الجديد مختلف عن a. [1] [2]
القيد
أما replace(a,y=7) فيفشل؛ لا تمرر حقل init=False ضمن التغييرات. [1] [2]

النطاق
القاعدة العددية مؤلفة للفئة المعروضة. لم نستعمل حقولًا متداخلة أو تهيئة مخصصة؛ لا نعمم هذا الحساب على كل فئة. [1] [2]
المراجع
- Python: dataclasses.replace
- CPython 3.12.14: replace
- موضوع تك: لغة بايثون — مفردات
- موضوع تك: تطبيقات بايثون — مفردات
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
