Treci la conținutul principal

Ce este

Șablonul Prototip (Prototype) creează obiecte noi prin clonarea unui obiect existent, în loc să le construiască de la zero. Pregătești un obiect ca model, apoi îl copiezi și schimbi doar ce diferă.

Singurul lucru la care trebuie să fii atent în Python: o copie superficială (copy.copy) împarte listele și dicționarele din interiorul obiectului — copy.deepcopy le copiază și pe ele, așa că clona este cu adevărat independentă.


Exemplu: un șablon de document

Șablonul conține părțile care se repetă în fiecare document. clone() folosește copy.deepcopy — inclusiv pentru lista de etichete — așa că modificarea copiei lasă șablonul neatins.

Clonează, apoi schimbă diferența

Raportul a primit un titlu nou și o etichetă în plus, iar șablonul are în continuare doar ['draft'] — pentru că copy.deepcopy a copiat lista de etichete. O copie superficială cu copy.copy ar fi împărțit-o, iar șablonul s-ar fi schimbat și el.

Prompt
Scrie un program Python cu o clasă de date (dataclass) Document (title, footer, o listă tags) și o metodă clone care folosește copy.deepcopy, astfel încât și lista tags să fie copiată. Clonează un șablon într-un raport, schimbă titlul raportului și adaugă o etichetă, apoi afișează ambele obiecte pentru a arăta că șablonul nu a fost afectat.
Ieșire: program Python complet

Când să-l folosești

Folosește-l când obiectele noi sunt în mare parte copii ale unuia pregătit — documente dintr-un șablon, entități de joc dintr-un generator, date de test dintr-o configurație pregătită (fixture).

Renunță la el când obiectele sunt ușor de construit de la zero sau nu conțin nimic partajat. Pentru un obiect simplu, cu valori obișnuite, o copie superficială cu copy.copy este deja o copie completă.


Avantaje și dezavantaje

Avantaje: crearea ieftină a obiectelor preconfigurate; șablonul documentează valorile implicite; fără cod de inițializare repetat.

Dezavantaje: copierea se poate greși ușor, în mod subtil — o copie superficială în locul greșit leagă pe ascuns clona de original printr-o listă sau un dicționar comun; cu timpul, clonele se îndepărtează pe nesimțite de șablon.