logo cosasdedevs
Crear una instancia de una clase mediante un string con Python

Crear una instancia de una clase mediante un string con Python



My Profile
May 21, 2020

¡Hola! El tutorial de hoy es un tutorial cortito pero que espero que os pueda ayudar en vuestro aprendizaje en Python. Vamos a ver cómo crear una instancia de una clase mediante un string con Python, de esta forma, podremos instanciar clases de forma dinámica y en ciertos casos nos vendrá bien para crear un código más limpio 💪.

Para ello, lo primero que haremos, será crear una clase para realizar las pruebas con un contenido muy sencillo en el que pasaremos un nombre por el constructor y tendrá un método que imprimirá un saludo.

saludar.py

class Saludo:

    def __init__(self, nombre):
        self.nombre = nombre

    def saludar(self):
        print(f'¡Hola {self.nombre}!')


Ahora que tenemos la clase creada, vamos a crear otro archivo que será desde donde crearemos una instancia de la clase mediante un string.

main.py

from saludar import Saludo
from pprint import pprint

class_name = 'Saludo'
param = 'Alber'

m = globals()[class_name](param)
m.saludar()

pprint(globals())

Como veis, para instanciar la clase, utilizamos la función globals(). Esta devuelve un diccionario con las variables definidas en el namespace global. Cuando llamamos a globals desde una función o método, devuelve un diccionario que representa al namespace global del módulo donde se define la función o método, no desde donde se llama.

Al ser un diccionario, le pasamos como clave el nombre de la clase y los parámetros los enviamos como si estuviéramos creando una instancia de la clase de la forma habitual.

Este sería un ejemplo del output:

{
    'Saludo': <class 'saludar.Saludo'>,
    '__annotations__': {},
    '__builtins__': <module 'builtins' (built-in)>,
    '__cached__': None,
    '__doc__': None,
    '__file__': 'main.py',
    '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001C80B66D108>,
    '__name__': '__main__',
    '__package__': None,
    '__spec__': None,
    'class_name': 'Saludo',
    'm': <saludar.Saludo object at 0x000001C80B7E1448>,
    'param': 'Alber',
    'pprint': <function pprint at 0x000001C80B660F78>
}

En él se puede ver la importación de la clase y las variables que hemos definido.

Y listo, con esto ya podemos instanciar objetos de forma dinámica 💪.

Espero que este post te ayude y como siempre, te recomiendo seguirme en Twitter para estar al tanto de los nuevo contenido. Ahora también puedes seguirme en Instagram donde estoy subiendo tips, tutoriales en vídeo e información sobre herramientas para developers.

Por último os dejo mi guía para aprender a trabajar con APIs donde explico todo el funcionamiento de una API, el protocolo HTTP y veremos como construir una API con arquitectura REST.

Nos leemos 👋.

2617 vistas

🐍 Sígueme en Twitter

Si te gusta el contenido que subo y no quieres perderte nada, sígueme en Twitter y te avisaré cada vez que cree contenido nuevo 💪
Luego ¡Te sigo!

Nos tomamos en serio tu privacidad

Utilizamos cookies propias y de terceros para mejorar la experiencia del usuario a través de su navegación. Si pulsas entendido aceptas su uso. Ver política de cookies.