Access type hints in python
Spoiler: typing.get_type_hints() does the trick.
While working on freshlinks, I got frustrated with not having my arguments typed correctly when coming from docopt
. I know there's type-docopt
, but that introduces a new syntax and I haven't fully evaluated that library yet.
In the meantime, I wanted to see if I could implement a minimal approach, but first I need to be able to get the type hints from a class definition.
from dataclasses import dataclass
from pathlib import Path
from typing import get_type_hints
from typing import Optional
@dataclass
class Args:
"""Reticulate the splines from the command-line.
Usage: ./reticulate.py
[--help | --version]
[--debug] [--path PATH] [-n INT]
"""
help: bool = False
"""`-h, --help` show the help message and exit"""
version: bool = False
"""`--version` show the program version and exit"""
debug: bool = False
"""`--debug` show debug messages"""
path: Optional[Path] = None
"""`--path PATH` path to splines"""
n: int = 42
"""`-n INT` number of splines to reticulate"""
print(get_type_hints(Args))
# {
# 'help': <class 'bool'>,
# 'version': <class 'bool'>,
# 'debug': <class 'bool'>,
# 'path': typing.Union[pathlib.Path, NoneType],
# 'n': <class 'int'>
# }
I thought it might be easy, but I didn't think it would be this easy.
Now I just need to think about how to handle those Optional
vs Union
types.