Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to pass an array to a python generic?

I am doing some meta programming, and I need a way to define type hints on the fly. Is there a way to pass an array of arguments to a type hint? Something like:

# Some programatically generated list where I don't know the content until runtime
permitted_types = [int, str, bool, float, list, dict]

union = Union[*permitted_types]

The code above yields:

TypeError: Union[arg, ...]: each arg must be a type. Got [<class 'int'>, <class 'str'>, <class 'bool'>, <class 'float'>, <class 'list'>, <class 'dict'>]

Does anybody know syntax for doing this? At the moment I am reduced to the following and I hate it:

num_args = len(args)
if num_args == 1:
    return origin[args[0]]
elif num_args == 2:
    return origin[args[0], args[1]]
elif num_args == 3:
    return origin[args[0], args[1], args[2]]
elif num_args == 4:
    return origin[args[0], args[1], args[2], args[3]]
elif num_args == 5:
    return origin[args[0], args[1], args[2], args[3], args[4]]
elif num_args == 6:
    return origin[args[0], args[1], args[2], args[3], args[4], args[5]]
else:
    # Raise error
like image 994
tofarr Avatar asked Oct 28 '25 04:10

tofarr


1 Answers

Ok - I found the syntax by rummaging around in typing.py:

return Union[tuple(permitted_types)]
like image 92
tofarr Avatar answered Oct 29 '25 18:10

tofarr



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!