Clase anidada en Python
Las clases contienen diferentes miembros de datos y funciones y nos permiten crear objetos para acceder a estos miembros.
Python, como lenguaje de programación orientado a objetos, tiene muchos de estos objetos de diferentes clases. En Python tenemos un constructor importante llamado __init__
, que se llama cada vez que se crea una instancia de la clase, y también tenemos la palabra clave self
para referirse a la instancia actual de la clase.
Una clase anidada (también llamada clase interna) se define dentro de otra clase. Es muy común su uso en todos los lenguajes de programación orientados a objetos y puede tener muchas ventajas. No mejora el tiempo de ejecución pero puede ayudar a la legibilidad y mantenimiento del programa al agrupar clases relacionadas y también ocultar la clase anidada del mundo exterior.
El siguiente código muestra una estructura muy simple de una clase anidada:
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)
Producción :
Mathematics
Mark
Observe que no podemos acceder a la clase interna directamente. Creamos su objeto utilizando el formato outer.inner
.
Podemos acceder a la clase anidada en la clase externa pero no al revés. Para acceder a la clase anidada en la clase externa, podemos utilizar el formato outer.inner
o la palabra clave self
.
En el código siguiente, hacemos algunas alteraciones en las clases anteriores y accedemos a una función de la clase anidada usando la clase padre:
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()
Producción :
Mathematics From Inner Class
También podemos tener múltiples clases anidadas en Python. Tales situaciones se denominan Clases Anidadas Múltiples con una o más clases internas.
También puede haber algunos casos en los que tenemos una clase anidada dentro de otra clase anidada, y esto se llama una clase anidada multinivel.
El siguiente código muestra un ejemplo muy simple de una clase anidada multinivel.
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)
Producción :
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