init=False للمزخرف تمنع توليد __init__؛ دون تهيئة مولدة، __post_init__ لا تستدعى تلقائيًا. [1]
الخلاصة السريعة
لا؛ وجود الطريقة وحده لا يشغلها. [1]
- init=False للمزخرف تمنع توليد __init__؛ دون تهيئة مولدة، __post_init__ لا تستدعى تلقائيًا. [1]
- على CPython 3.12.14، Box تعرف number وتهيئة مخصصة تسنده؛ __post_init__ تسجل box وتضيف 1، لكنها غير مستدعاة من تهيئتنا. [1]
- own=Box(4): own.number تبقى 4 والسجل فارغ؛ الاستدعاء اللاحق لم يحدث. [1]
- هذا init=False على dataclass، وليس خيارًا على field؛ المثال بلا وراثة. [1]
- تحكم مستقل: Plain لها تهيئة مولدة و__post_init__ تسجل plain وتضيف 1. بعد control=Plain(4)، control.number هي 5 والسجل يحوي plain وحدها؛ own.number تبقى 4. [1]
التهيئة المولدة
init=False للمزخرف تمنع توليد __init__؛ دون تهيئة مولدة، __post_init__ لا تستدعى تلقائيًا. [1]
تهيئة مخصصة
على CPython 3.12.14، Box تعرف number وتهيئة مخصصة تسنده؛ __post_init__ تسجل box وتضيف 1، لكنها غير مستدعاة من تهيئتنا. [1]
السجل الفارغ
own=Box(4): own.number تبقى 4 والسجل فارغ؛ الاستدعاء اللاحق لم يحدث. [1]
from dataclasses import dataclass calls=[] @dataclass(init=False) class Box: number:int def __init__(self,number):self.number=number def __post_init__(self):calls.append("box");self.number+=1 own=Box(4) print(own.number,calls) [1]

موضع الخيار والتحكم
هذا init=False على dataclass، وليس خيارًا على field؛ المثال بلا وراثة. [1]
@dataclass class Plain: number:int def __post_init__(self):calls.append("plain");self.number+=1 control=Plain(4) print(control.number,calls,own.number) [1]
تحكم مستقل: Plain لها تهيئة مولدة و__post_init__ تسجل plain وتضيف 1. بعد control=Plain(4)، control.number هي 5 والسجل يحوي plain وحدها؛ own.number تبقى 4. [1]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
