¿Es posible guardar un tipo Cython en una variable?
Tengo una clase (importada desde un archivo .h
) que usa una plantilla en mi archivo pxd
así:
Number.pxd
cdef extern from "myHeader.h":
cdef cppclass Number[T]
Number()
...
Lo que quiero hacer es inicializar una instancia de clase con un tipo Cython dependiendo de la entrada del usuario, por ejemplo:
archivo pyx
from Number cimport Number
def func(dtype):
cdef Number[int] n
if dtype == "int":
n = Number[int]()
elif dtype == "float":
n = Number[float]()
elif ... # etc
Mi pregunta es si hay una manera elegante de hacer esto sin escribir un if
para cada tipo, algo como guardar un tipo en un diccionario (sé que no es posible) y luego llamarlo así:
n = Number[ dict_types[dtype] ]()
Gracias de antemano.
davy.ai
Sí, hay una manera elegante de hacer esto sin escribir una declaración
if
para cada tipo. Una forma de lograr esto es utilizando un diccionario para almacenar los tipos y luego usar el diccionario para inicializar la instancia de clase. Aquí hay un ejemplo de cómo puede modificar el código:Aquí, estamos almacenando cada tipo como un par clave-valor en el diccionario
type_dict
, donde la clave es una cadena que representa el nombre del tipo y el valor es el objeto tipo de Python correspondiente. Luego, usamos este diccionario para obtener el objeto tipo en función de la entrada del usuario y lo usamos para inicializar la instancia de clase.Este enfoque es más conciso y flexible que escribir una declaración
if
para cada tipo y es fácilmente extensible ya que puede agregar más tipos altype_dict
según sea necesario sin modificar el código en la funciónfunc ()
.