Modificatori di accesso in Python

Quando si inizia a programmare in Python, è importante comprendere come controllare la visibilità degli attributi e dei metodi di una classe. Anche se Python non ha i modificatori di accesso come in altri linguaggi (es. public, private, protected in Java o C#), esistono delle convenzioni che permettono di ottenere un comportamento simile. Vediamo insieme come funzionano.

Public access (accesso pubblico): cosa significa e come si usa

In Python, per accesso pubblico si intende che un attributo o un metodo è accessibile da qualsiasi parte del programma. Questo è il comportamento predefinito, ovvero se non specifichiamo nulla, l’elemento sarà considerato pubblico.

Accesso pubblico

Nel codice seguente, l’attributo nome è accessibile liberamente da fuori la classe:

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


persona = Persona("Marco")
print(persona.nome)

Protected access (accesso protetto): convenzioni e utilizzo

Un attributo è considerato protetto se viene preceduto da un singolo underscore (_). Non è una vera restrizione, ma una convenzione che segnala ai programmatori che quell’attributo non dovrebbe essere utilizzato al di fuori della classe o dalle sue sottoclassi.

Accesso protetto

Ecco un esempio pratico di utilizzo di un attributo protetto:

class Persona:
    
    def __init__(self, nome):
        
        self._nome = nome


persona = Persona("Luca")
print(persona._nome)  # È accessibile, ma non è consigliato accedervi direttamente

Private access (accesso privato): come limitare l’accesso

Per rendere un attributo privato, si utilizza un doppio underscore (__) all’inizio del nome. Questo attiva un meccanismo chiamato name mangling, che cambia internamente il nome dell’attributo per renderlo meno accessibile dall’esterno.

Accesso privato

Vediamo ora un esempio di attributo privato:

class Persona:
    
    def __init__(self, nome):
        
        self.__nome = nome


persona = Persona("Giulia")
# print(persona.__nome)  # Questo darà errore
print(persona._Persona__nome)  # Ma possiamo accedervi in questo modo

Getter e setter: accesso controllato agli attributi

Per evitare l’accesso diretto agli attributi privati o protetti, è una buona pratica usare i metodi getter e setter. Questi metodi permettono di leggere o modificare un attributo in modo controllato.

Getter e setter

Qui sotto trovi un esempio semplice:

class Persona:
    
    def __init__(self, nome):
        
        self.__nome = nome

    def get_nome(self):
        
        return self.__nome

    def set_nome(self, nuovo_nome):
        
        self.__nome = nuovo_nome


persona = Persona("Francesco")
print(persona.get_nome())

persona.set_nome("Andrea")
print(persona.get_nome())

Modificatori di accesso: esempi pratici per comprendere meglio

Per chiarire ulteriormente le differenze tra i tipi di accesso, vediamo una classe che li usa tutti insieme.

Accesso pubblico

class Esempio:
    
    def __init__(self):
        
        self.pubblico = "Sono pubblico"

Accesso protetto

class Esempio:
    
    def __init__(self):
        
        self._protetto = "Sono protetto"

Accesso privato

class Esempio:
    
    def __init__(self):
        
        self.__privato = "Sono privato"

Getter e setter

class Esempio:
    
    def __init__(self):
        
        self.__dato = "Dato segreto"

    def get_dato(self):
        
        return self.__dato

    def set_dato(self, nuovo_valore):
        
        self.__dato = nuovo_valore

Utilizzando queste convenzioni, possiamo scrivere codice Python più organizzato, leggibile e manutenibile. Anche se Python non impone regole rigide sull’accesso, seguire queste buone pratiche è essenziale per un progetto ben strutturato.

Corsi correlati

In Arrivo

Design Pattern per videogiochi

I Design Pattern sono soluzioni a problemi comuni che si incontrano nello sviluppo del software. Nel contesto dei videogiochi, questi pattern possono aiutare a gestire la complessità crescente dei giochi moderni. Sei appassionato di videogiochi? Hai mai pensato a come vengono progettati e sviluppati? Sei curioso di scoprire i segreti dietro la creazione dei tuoi giochi preferiti? Allora sei nel posto giusto! Questo corso è stato progettato per fornirti una solida comprensione dei Design Pattern, strumenti fondamentali per ogni sviluppatore di giochi. Attraverso esempi pratici e realistici, esploreremo insieme come questi pattern possono aiutarti a creare giochi più efficienti, flessibili e mantenibili.

In Arrivo

Corso Fondamenti di Python

Python, uno dei linguaggi di programmazione più popolari al mondo, è ampiamente utilizzato da colossi dell’informatica e della tecnologia come Google, la Nasa e Mozilla.
Questo corso sui fondamenti di Python esplorerà le ragioni del suo successo duraturo. Impareremo la potente ed espressiva sintassi di Python, che consente di ottenere risultati impressionanti con poche righe di codice.

In Arrivo

Blender Masterclass 2

I paesaggi, in generale, possono risultare intimidatori data la loro complessità, costituita da numerosi elementi che sembrano formare qualcosa di virtualmente infinito. Durante le lezioni di questo corso, ci concentreremo su una scomposizione delle diverse fasi coinvolte nella creazione di una scena, affrontandole una alla volta attraverso passi graduati.

In Arrivo

Blender Masterclass 1

In questo corso di Blender 3D, Masha, in collaborazione con Gedemy, vi mostrerà il processo di modellazione, UV mapping, shading, e texture painting di un asset. Una volta apprese le basi, vedremo anche come effettuare il baking delle textures e la preparazione con successivo export della mesh in modo che possa essere utilizzabile all’interno di un qualsiasi altro software.

Crea il tuo account gratuito Gedemy

Gedemy è la prima piattaforma di formazione italiana che ti permette di sviluppare competenze in ambiti come Game Design, Programming, Arte, 3D, Tech, AI e molto altro.