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
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