Clase anidada en Python

Manav Narula 25 febrero 2021
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 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

Artículo relacionado - Python Class