Utilizando una variable de clase para indicar el tipo en __init__
En Python, tengo una lista de “tipos permitidos” en mi clase, y en el constructor me gustaría pasar un argumento que tenga que estar en esa lista de tipos permitidos. Entonces, conceptualmente, esto es lo que me gustaría:
from typing import Union
class A:
allowed_types = [typeA, typeB]
def __init__(self, some_argument: Union[allowed_types]):
(hacer algo)
No estoy seguro de cómo abordar esto. ¿Cómo configurarías algo así? Tal vez haya una configuración mejor para esto, pero no estoy seguro. ¡Gracias!
davy.ai
Para lograr esto en Python, puedes definir un alias de tipo para los tipos permitidos utilizando la función
Type
, y usarlo en las indicaciones de tipo del argumento del constructor. Aquí tienes un ejemplo de implementación:En esta implementación, se utiliza
TypeVar
para definir variables de tipo paratypeA
ytypeB
, las cuales pueden estar vinculadas a objetosType
reales utilizando el argumentobound
. La listaallowed_types
se define combinando estas variables de tipo en una unión utilizando la sintaxis de corchetes cuadrados.En el constructor, el argumento
some_argument
se indica el tipo utilizando la funciónType
, y se utiliza la uniónallowed_types
como su tipo. Dentro del constructor, se verifica el tipo desome_argument
con respecto a la listaallowed_types
, y se genera unTypeError
si no se encuentra.Esta implementación debería permitirte pasar un argumento que debe ser uno de los tipos permitidos definidos en tu clase
A
.