
Tanto tempo fa in una galassia lontana, lontana…
Fino a questo momento abbiamo gestito singoli oggetti. Ma un vero Impero Galattico gestisce flotte intere. È arrivato il momento di capire come mettere in pratica i concetti di Ereditarietà.
Sei stato assunto dalla Imperial Fleet Corp: il loro software è vecchio, confusionario e pieno di codice duplicato. Il tuo compito è rifondare il sistema usando l’ereditarietà per le astronavi e, successivamente, avanzati algoritmi per ottimizzare le risorse… più una quest finale adatta solo ai più temerari di voi.
<aside> 🧩
Prerequisiti
<aside> 🧠
Cosa imparerai con questo esercizio
super()
<aside> 🎯
Focus su
Ereditarietà, super(), Overriding, @final.
</aside>
Il primo passo per la gestione della Flotta Imperiale è creare una gerarchia di classi solida. Definiremo una generica navicella spaziale Spaceship e poi implementeremo una serie di navi specifiche.
Crea un file chiamato spaceships.py e implementa le seguenti classi.
SpaceshipQuesta è la classe parent di tutte le navi. Contiene la logica condivisa.
| Attributo / Metodo | Tipo | Descrizione |
|---|---|---|
name |
str |
Il nome della nave (es. “Tie Fighter”). |
fuel |
int |
Quantità di carburante. Parte sempre da 100. |
__init__ |
Costruttore | Accetta solo name. Inizializza fuel a 100. |
fly(distance) |
Metodo | Simula un viaggio. |
"{name} percorre {distance} anni luce.".dock() | Metodo | Decorato con @final.
Stampa: "{name} esegue la procedura di attracco standard.".
Nota: La procedura di attracco è standard per sicurezza! |CargoShipEredita da Spaceship. È progettata per il trasporto pesante: lenta e consuma molto.
| Attributo / Metodo | Tipo | Descrizione |
|---|---|---|
max_load |
int |
Carico massimo trasportabile (tonnellate). |
current_load |
int |
Carico attuale (parte da 0). |
__init__ |
Costruttore | Accetta name e max_load. |
⚠️ Usa super() per impostare il nome. |
||
load(amount) |
Metodo | Aggiunge peso al carico attuale. |
| Se supera il massimo, errore. Altrimenti aggiorna. | ||
fly(distance) |
Override | Le navi cargo sono pesanti. |
super().fly(distance) per muoversi.ExplorationProbeEredita da Spaceship. È un gioiello tecnologico, non modificabile.