![Crear una instancia de una clase mediante un string con Python](/media/posts/photos/crear-una-instancia-de-una-clase-mediante-un-string-con-python_zRaHZek.jpg)
Crear una instancia de una clase mediante un string con Python
![My Profile](/media/users/pictures/alber.png)
¡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 👋.