In questo progetto utilizzerai la programmazione orientata agli oggetti per creare una classe Rettangolo (Rectangle) e una classe Quadrato (Square). La classe Square dovrebbe essere una sottoclasse di Rectangle ed ereditare metodi ed attributi.
Quando viene creato un oggetto Rectangle, dovrebbe essere inizializzato con attributi `width` (larghezza) e `height` (altezza). La classe dovrebbe anche contenere i seguenti metodi:
-`get_picture`: Restituisce una stringa che rappresenta la forma usando linee di "\*". Il numero di righe dovrebbe essere uguale all'altezza e il numero di "\*" in ogni riga dovrebbe essere uguale alla larghezza. Ci dovrebbe essere un carattere di nuova linea (`\n`) alla fine di ogni riga. Se la larghezza o l'altezza è maggiore di 50, questo dovrebbe restituire la stringa: `"Too big for picture."`.
-`get_amount_inside`: Prende un'altra forma (quadrato o rettangolo) come argomento. Restituisce il numero di volte che la forma passata potrebbe adattarsi all'interno della forma (senza rotazioni). Per esempio, un rettangolo con una larghezza di 4 e un'altezza di 8 potrebbe contenere due quadrati con lati di 4.
Inoltre, se un'istanza di Rectangle è rappresentata come una stringa, dovrebbe apparire come: `Rectangle(width=5, height=10)`
## Classe Square
La classe Square dovrebbe essere una sottoclasse di Rectangle. Quando viene creato un oggetto Square, viene passata la lunghezza di un singolo lato. Il metodo `__init__` dovrebbe memorizzare la lunghezza del lato sia nell'attributo `width` che in `height` della classe Rectangle.
La classe Square dovrebbe essere in grado di accedere ai metodi della classe Rectangle, ma dovrebbe anche contenere un metodo `set_side`. Se un'istanza di un quadrato è rappresentata come una stringa, dovrebbe apparire come `Square(side=9)`
Inoltre, i metodi `set_width` e `set_height` della classe Square dovrebbero impostare sia la larghezza che l'altezza.
## Esempio di utilizzo
```py
rect = shape_calculator.Rectangle(10, 5)
print(rect.get_area())
rect.set_height(3)
print(rect.get_perimeter())
print(rect)
print(rect.get_picture())
sq = shape_calculator.Square(9)
print(sq.get_area())
sq.set_side(4)
print(sq.get_diagonal())
print(sq)
print(sq.get_picture())
rect.set_height(8)
rect.set_width(16)
print(rect.get_amount_inside(sq))
```
Tale codice deve restituire:
```bash
50
26
Rectangle(width=10, height=3)
**********
**********
**********
81
5.656854249492381
Square(side=4)
****
****
****
****
8
```
I test unitari per questo progetto sono in `test_module.py`.
Scrivi il tuo codice in `shape_calculator.py`. Per lo sviluppo, puoi usare `main.py` per testare la tua funzione `shape_calculator()`. Usa il bottone "run" e `main.py` sarà eseguito.