Classe annidata in Python

Manav Narula 30 marzo 2021
Classe annidata in Python

Le classi contengono diversi membri di dati e funzioni e ci consentono di creare oggetti per accedere a questi membri.

Python, come linguaggio di programmazione orientato agli oggetti, ha molti di questi oggetti di classi diverse. In Python abbiamo un importante costruttore chiamato __init__, che viene chiamato ogni volta che viene creata un’istanza della classe, e abbiamo anche la parola chiave self per fare riferimento all’istanza corrente della classe.

Una classe annidata (chiamata anche classe interna) è definita all’interno di un’altra classe. È molto comunemente usato in tutti i linguaggi di programmazione orientati agli oggetti e può avere molti vantaggi. Non migliora il tempo di esecuzione ma può aiutare nella leggibilità e nella manutenzione del programma raggruppando le classi correlate e nascondendo anche la classe nidificata dal mondo esterno.

Il codice seguente mostra una struttura molto semplice di una classe annidata:

class Dept:
    def __init__(self, dname):
        self.dname = dname

    class Prof:
        def __init__(self, pname):
            self.pname = pname


math = Dept("Mathematics")
mathprof = Dept.Prof("Mark")

print(math.dname)
print(mathprof.pname)

Produzione:

Mathematics
Mark

Nota che non possiamo accedere direttamente alla classe interna. Creiamo il suo oggetto utilizzando il formato outer.inner.

Possiamo accedere alla classe annidata nella classe esterna ma non viceversa. Per accedere alla classe annidata nella classe esterna, possiamo utilizzare il formato outer.inner o la parola chiave self.

Nel codice seguente, apportiamo alcune modifiche alle classi precedenti e accediamo a una funzione della classe annidata utilizzando la classe genitore:

class Dept:
    def __init__(self, dname):
        self.dname = dname
        self.inner = self.Prof()

    def outer_disp(self):
        self.inner.inner_disp(self.dname)

    class Prof:
        def inner_disp(self, details):
            print(details, "From Inner Class")


math = Dept("Mathematics")

math.outer_disp()

Produzione:

Mathematics From Inner Class

Possiamo anche avere più classi annidate in Python. Tali situazioni sono chiamate classi multiple annidate con una o più classi interne.

Ci possono essere anche alcuni casi in cui abbiamo una classe nidificata all’interno di una classe nidificata, e questa è chiamata classe nidificata multilivello.

Il codice seguente mostra un esempio molto semplice di una classe nidificata a più livelli.

class Dept:
    def __init__(self, dname):
        self.dname = dname

    class Prof:
        def __init__(self, pname):
            self.pname = pname

        class Country:
            def __init__(self, cname):
                self.cname = cname


math = Dept("Mathematics")
mathprof = Dept.Prof("Mark")
country = Dept.Prof.Country("UK")

print(math.dname, mathprof.pname, country.cname)

Produzione:

Mathematics Mark UK
Autore: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Articolo correlato - Python Class