<aside> 🧩
Player, Weapon, main.py).__str__.<aside> 🧠
<aside> 📢
Questo esercizio introduce il concetto di refactoring. Con questo termine si indica la modifica della struttura interna del codice sorgente di un programma senza alterarne il comportamento esterno.
L’obiettivo del refactoring è migliorare gli attributi non funzionali del codice, come la:
Si tratta di una serie di piccole modifiche atomiche e sicure (spesso supportate da test) che cambiano la progettazione del codice. Non è una riscrittura completa, ma un miglioramento continuo. Esempi includono la ridenominazione di variabili, l’estrazione di metodi o l’introduzione di pattern di progettazione.
Gli IDE moderni (come la suite JetBrains, ad esempio) supportano il refactoring con strumenti automatici e sicuri che ne semplificano l’applicazione; un esempio di funzionalità fondamentale che vi invito a sperimentare è l’Extract Method che consente di isolare un blocco di codice in un nuovo metodo con un solo comando, riducendo la duplicazione e migliorando la chiarezza.

Il sottomenu Refactor di PyCharm
</aside>
Rifattorizzare la soluzione della Parte 1 introducendo l’incapsulamento tramite la convenzione Python con __ (name mangling) e i getter e setter espliciti.
__
Weapon, Player).Weapon
get_damage() deve restare utilizzabile come nella Parte 1.Player
equip(), attack(), take(), is_alive() devono continuare a funzionare come prima, ma interamente basati su attributi privati.__str__ aggiornati
Nota: i danni inflitti variano perché dipendono da calcoli e casualità.
=== SIMULAZIONE COMBATTIMENTO ===
Gimli: Forza=16, Destrezza=12
Legolas: Forza=8, Destrezza=17
Gimli equipaggia: Spada a due mani (8–15 dmg)
Legolas equipaggia: Balestra (8–13 dmg)
=== INIZIO COMBATTIMENTO ===
--- Turno 1 ---
Gimli attacca Legolas e infligge 12 danni!
Legolas (HP: 33/45)
--- Turno 2 ---
Legolas attacca Gimli e infligge 7 danni!
Gimli (HP: 43/50)
...
=== FINE COMBATTIMENTO ===
🏆 Gimli vince il combattimento! Gimli (HP: 10/50)
<aside> <img src="notion://custom_emoji/899aa73c-260f-813c-baa9-0003a270e9e6/29eaa73c-260f-8057-931f-007a0ac7402b" alt="notion://custom_emoji/899aa73c-260f-813c-baa9-0003a270e9e6/29eaa73c-260f-8057-931f-007a0ac7402b" width="40px" />
Parte 1: creare classi e istanziare oggetti
Parte 2: incapsulamento e visibilità
Parte 3: @property, metodi privati e duck typing
Parte 4: validazione e gestione errori
</aside>
<aside> ©️
License
Python Doesn’t Byte © 2025 by Marco Farina is licensed under CC BY-NC-SA 4.0. To view a copy of this license, visit https://creativecommons.org/licenses/by-nc-sa/4.0/
E-mail: [email protected]
</aside>