Accesso agli attributi e metodi degli oggetti in Python
Comprendere come accedere agli attributi e metodi degli oggetti in Python è fondamentale per sfruttare al meglio le potenzialità della programmazione orientata agli oggetti. Questa guida esplorerà in dettaglio come definire, accedere e manipolare attributi e metodi degli oggetti in Python.
Oggetto in Python
Un oggetto in Python è una singola istanza di una classe che incapsula dati (attributi) e comportamenti (metodi). Gli oggetti permettono di rappresentare entità reali e astratte all'interno del codice in modo modulare e riutilizzabile.
Definizione di attributi e metodi
Per creare una classe in Python, si utilizza la parola chiave class seguita dal nome della classe e due punti. Ecco un esempio di una semplice classe Persona:
class Persona:
def init(self, nome, età):
self.nome = nome
self.età = età
def saluta(self):
return f"Ciao, mi chiamo {self.nome} e ho {self.età} anni."
Gli attributi di istanza sono specifici di ciascuna istanza di una classe e vengono definiti all'interno del metodo init.
Mentre, gli attributi di classe sono condivisi tra tutte le istanze di una classe e vengono definiti direttamente all'interno della classe.
class Persona:
specie = "Homo sapiens" # Attributo di classe
def init(self, nome, età):
self.nome = nome
self.età = età # Attributo di istanza
I metodi di istanza sono funzioni definite all'interno di una classe che operano sugli attributi di istanza. Devono avere self come primo parametro.
Mentre, i metodi di classe utilizzano il decoratore @classmethod e ricevono la classe come primo parametro, convenzionalmente chiamato cls.
class Persona:
specie = "Homo sapiens"
def init(self, nome, età):
self.nome = nome
self.età = età
@classmethod
def descrizione(cls):
return f"Tutti gli esseri umani appartengono alla specie {cls.specie}."
I metodi statici utilizzano il decoratore @staticmethod e non ricevono né la classe né l'istanza come parametro. Sono utili per funzioni che non dipendono né dagli attributi di istanza né da quelli di classe.
class Persona:
@staticmethod
def info_generale():
return "Gli esseri umani hanno bisogno di cibo e acqua per sopravvivere."
Accesso agli attributi degli oggetti
Per accedere agli attributi di istanza di un oggetto, si utilizza la notazione punto (.) seguita dal nome dell'attributo.
persona1 = Persona("Luca", 30)
print(persona1.nome) # Output: Luca
print(persona1.età) # Output: 30
Gli attributi di istanza possono essere modificati direttamente utilizzando la notazione punto.
persona1.nome = "Marco"
print(persona1.nome) # Output: Marco
Gli attributi di classe possono essere accessi tramite la classe stessa o tramite un'istanza.
print(Persona.specie) # Output: Homo sapiens
print(persona1.specie) # Output: Homo sapiens
Accesso ai metodi degli oggetti
I metodi di istanza vengono chiamati utilizzando la notazione punto seguita dal nome del metodo con le parentesi.
print(persona1.saluta()) # Output: Ciao, mi chiamo Marco e ho 30 anni.
I metodi di classe vengono chiamati utilizzando la notazione punto sulla classe stessa o su un'istanza.
print(Persona.descrizione()) # Output: Tutti gli esseri umani appartengono alla specie Homo sapiens.
print(persona1.descrizione()) # Output: Tutti gli esseri umani appartengono alla specie Homo sapiens.
I metodi statici vengono chiamati utilizzando la notazione punto sulla classe stessa o su un'istanza.
print(Persona.info_generale()) # Output: Gli esseri umani hanno bisogno di cibo e acqua per sopravvivere.
print(persona1.info_generale()) # Output: Gli esseri umani hanno bisogno di cibo e acqua per sopravvivere.
Incapsulamento e accesso agli attributi privati
L'incapsulamento è una caratteristica dell'OOP che permette di nascondere i dettagli interni di un oggetto. In Python, si possono definire attributi privati utilizzando un doppio underscore (__) come prefisso.
Per accedere agli attributi privati, si utilizzano metodi di accesso specifici, noti anche come getter e setter.
I metodi getter e setter permettono di accedere e modificare gli attributi privati rispettivamente.
class ContoBancario:
def init(self, saldo_iniziale):
self.__saldo = saldo_iniziale
def deposita(self, importo):
self.__saldo += importo
def preleva(self, importo):
if importo <= self.__saldo:
self.__saldo -= importo
else:
print("Saldo insufficiente")
def get_saldo(self):
return self.__saldo
def set_saldo(self, saldo):
if saldo >= 0:
self.__saldo = saldo
else:
print("Il saldo non può essere negativo")
Conclusione
Comprendere come accedere e manipolare gli attributi e i metodi degli oggetti in Python è fondamentale per diventare un programmatore efficace. Questo include la conoscenza di attributi di istanza e di classe, metodi di istanza, di classe e statici, nonché le tecniche di incapsulamento e ereditarietà.