Classi e Oggetti in python

Documentazione Python Tutorial Python

di seguito alcuni concetti chiave relativi alle classi e agli oggetti in Python:
1. Classe: Una classe è una definizione astratta di un tipo di oggetto. Definisce gli attributi (variabili) e i metodi (funzioni) che gli oggetti di quella classe avranno. Ad esempio, una classe `Auto` potrebbe avere attributi come `marca` e `modello` e metodi come `accelera` e `ferma`.
2. Oggetto: Un oggetto è un'istanza di una classe. È un'entità concreta che contiene dati specifici e può eseguire azioni definite nei metodi della classe. Ad esempio, un'istanza specifica di `Auto` potrebbe essere un'auto con una marca "Toyota" e un modello "Camry".
3. Attributi: Gli attributi sono variabili definite all'interno di una classe che memorizzano dati specifici per ogni oggetto di quella classe. Ad esempio, una classe `Persona` potrebbe avere attributi come `nome` e `età`.
4. Metodi: I metodi sono funzioni definite all'interno di una classe che definiscono il comportamento degli oggetti di quella classe. Ad esempio, una classe `Cane` potrebbe avere un metodo `abbaiare()` che permette agli oggetti di emettere un suono.
5. Costruttore: Il costruttore è un metodo speciale chiamato `__init__` che viene eseguito automaticamente quando un oggetto della classe viene creato. Viene utilizzato per inizializzare gli attributi dell'oggetto.
6. Ereditarietà: La ereditarietà è un concetto che consente di creare nuove classi basate su classi esistenti. Una classe derivata (sottoclasse) eredita attributi e metodi dalla classe base (superclasse) e può anche aggiungere nuovi attributi e metodi.
7. Incapsulamento: L'incapsulamento è il concetto di nascondere alcune informazioni interne di una classe e fornire un'interfaccia pubblica per interagire con gli oggetti. In Python, l'incapsulamento è spesso implementato utilizzando l'underscore singolo (`_`) per indicare che un attributo o un metodo dovrebbe essere considerato "privato" e non accessibile direttamente dall'esterno della classe.
Esempio semplice di una classe `Persona` in Python:

                
```python
class Persona:
    def __init__(self, nome, eta):
        self.nome = nome
        self.eta = eta

    def saluta(self):
        print(f"Ciao, sono {self.nome} e ho {self.eta} anni.")

# Creazione di un oggetto Persona
persona1 = Persona("Alice", 30)

# Chiamata al metodo saluta
persona1.saluta()
```                
                
              

In questo esempio, abbiamo definito una classe `Persona` con attributi `nome` e `eta` e un metodo `saluta`. Abbiamo creato un oggetto `persona1` della classe `Persona` e chiamato il metodo `saluta` su di esso.
Le classi e gli oggetti sono concetti fondamentali della programmazione orientata agli oggetti e permettono di organizzare il codice in modo più modulare e riutilizzabile, migliorando la manutenibilità del codice e consentendo la rappresentazione di entità reali in modo più naturale.