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