Python - Classi e Oggetti
Ciao a tutti, aspiranti programmatori Python! Oggi ci imbarqueremo in un viaggio avventuroso nel mondo della Programmazione Orientata agli Oggetti (OOP) in Python. Allacciati la cintura, perché stiamo per trasformare il tuo modo di pensare al codice!
Cos'è una Classe in Python?
Immagina di costruire un virtuale zoo. Non creeresti ogni animale da zero, giusto? Ecco dove le classi diventano utili!
Una classe in Python è come un progetto o un modello per creare oggetti. Definisce un set di attributi e metodi che gli oggetti di quella classe avranno.
Creiamo una semplice classe per rappresentare un cane:
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
print(f"{self.name} dice Woof!")
In questo esempio, Dog
è la nostra classe. Ha attributi come name
e breed
, e un metodo chiamato bark()
.
Creazione di Classi in Python
Creare una classe è semplice come usare la parola chiave class
seguita dal nome della classe. Creiamo una classe Car
più dettagliata:
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer = 0
def drive(self, distance):
self.odometer += distance
print(f"Hanno guidato {distance} miglia. Totale: {self.odometer} miglia")
def honk(self):
print("Beep beep!")
Qui, __init__
è un metodo speciale chiamato costruttore. Viene chiamato quando creiamo un nuovo oggetto di questa classe.
Cos'è un Oggetto?
Se una classe è un progetto, un oggetto è l'effettiva "cosa" creata da quel progetto. È un'istanza specifica di una classe.
Creazione di Oggetti di Classi in Python
Creare un oggetto (chiamato anche istanziare) è come usare il nostro progetto per creare qualcosa di reale. Creiamo alcune macchine:
my_car = Car("Toyota", "Corolla", 2020)
your_car = Car("Honda", "Civic", 2019)
print(my_car.make) # Output: Toyota
your_car.drive(50) # Output: Hanno guidato 50 miglia. Totale: 50 miglia
my_car.honk() # Output: Beep beep!
Ogni macchina è un oggetto separato con il proprio set di attributi e metodi.
Accesso agli Attributi degli Oggetti in Python
Possiamo accedere agli attributi di un oggetto usando la notazione con il punto. Esaminiamo la nostra macchina:
print(f"La mia macchina è una {my_car.year} {my_car.make} {my_car.model}")
# Output: La mia macchina è una 2020 Toyota Corolla
Attributi di Classe Integrati in Python
Le classi di Python sono dotate di alcuni attributi integrati. Esploriamoli:
class MyClass:
x = 5
print(MyClass.__name__) # Output: MyClass
print(MyClass.__module__) # Output: __main__
print(MyClass.__dict__) # Output: {'__module__': '__main__', 'x': 5, ...}
Classe Integrata dei Tipi di Dati di Python
Sai che anche i tipi di dati di base di Python sono oggetti? Controlliamo:
print(type(5)) # Output: <class 'int'>
print(type("Ciao")) # Output: <class 'str'>
print(type([1, 2, 3])) # Output: <class 'list'>
Tutto in Python è un oggetto!
Raccolta dei Rifiuti (Distruzione degli Oggetti) in Python
In Python, non è necessario distruggere manualmente gli oggetti. Il garbage collector di Python si prende cura di questo automaticamente quando un oggetto non è più in uso.
import gc
# Creare un oggetto
my_car = Car("Toyota", "Corolla", 2020)
# Rimuovere il riferimento
my_car = None
# Forzare la raccolta dei rifiuti (di solito non necessario)
gc.collect()
Nascondimento dei Dati in Python
Nella OOP, spesso vogliamo controllare l'accesso a certi attributi. Python utilizza la convenzione di anteporre gli attributi con underscores:
class BankAccount:
def __init__(self, balance):
self._balance = balance # Attributo protetto
self.__secret = "shh" # Attributo privato
def deposit(self, amount):
self._balance += amount
def get_balance(self):
return self._balance
account = BankAccount(1000)
print(account._balance) # Output: 1000 (ma non dovremmo farlo!)
print(account.__secret) # Questo solleverà un AttributeError
Ecco una tabella che riassume i metodi che abbiamo coperto:
Metodo | Descrizione |
---|---|
__init__(self, ...) |
Metodo costruttore, chiamato quando si crea un nuovo oggetto |
__str__(self) |
Restituisce una rappresentazione stringa dell'oggetto |
__repr__(self) |
Restituisce una rappresentazione dettagliata stringa dell'oggetto |
__len__(self) |
Definisce il comportamento per la funzione integrata len()
|
__getitem__(self, key) |
Definisce il comportamento per le operazioni di indicizzazione |
__setitem__(self, key, value) |
Definisce il comportamento per l'assegnazione dei valori indicizzati |
Eccoci qui! Hai appena fatto i tuoi primi passi nel mondo della Programmazione Orientata agli Oggetti in Python. Ricorda, la pratica fa il maestro. Prova a creare le tue classi e oggetti, e presto sarai in grado di costruire programmi complessi ed efficienti come un professionista!
Credits: Image by storyset