A backport of Python 3.10's inspect.get_annotation() function
Project description
get-annotations
A backport of Python 3.10's inspect.get_annotations()
function.
Install
pip3 install -U get-annotations
Usage
from get_annotations import get_annotations
def foo(x: int) -> str: ...
print(get_annotations(foo))
# {'x': <class 'int'>, 'return': <class 'str'>}
If your module uses from __future__ import annotations
, you'll want to set eval_str=True
, otherwise get_annotations
will return strings:
from __future__ import annotations
import typing as t
def bar(x: t.List[MyObject]): ...
class MyObject:
pass
print(get_annotations(bar))
# {'x': 't.List[MyObject]'}
print(get_annotations(bar, eval_str=True))
# {'x': typing.List[__main__.MyObject]}
Note that it does not work with old-style forward ref annotations, such as t.List["MyObject"]
:
>>> from typing import List
>>> def foo(a: int) -> List["MyObject"]: ...
...
>>> class MyObject: ...
...
>>> print(get_annotations(foo, eval_str=True)) # Note that 'MyObject' is returned as a string!
{'a': <class 'int'>, 'return': typing.List[ForwardRef('MyObject')]}
>>>
>>> print(get_annotations(foo, eval_str=False)) # Identical
{'a': <class 'int'>, 'return': typing.List[ForwardRef('MyObject')]}
If you really don't want to use from __future__ import annotations
for some reason, you can surround an entire type annotation in quotes to forward ref it:
>>> def foo(a: int) -> "List[MyObject]": ...
...
>>> print(get_annotations(foo, eval_str=True)) # This works now
{'a': <class 'int'>, 'return': typing.List[__main__.MyObject]}
>>>
>>> print(get_annotations(foo, eval_str=False)) # For comparison
{'a': <class 'int'>, 'return': 'List[MyObject]'}
License
MIT
Contact
A library by Shawn Presser. If you found it useful, please consider joining my patreon!
My Twitter DMs are always open; you should send me one! It's the best way to reach me, and I'm always happy to hear from you.
- Twitter: @theshawwn
- Patreon: https://www.patreon.com/shawwn
- HN: sillysaurusx
- Website: shawwn.com
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for get_annotations-0.1.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 788ba8aa2434ee34ffb985c4aea2f9e575204c884c0e0dd0f969be846470e527 |
|
MD5 | f028d6aa0b44d5345d69051bd7eefcf9 |
|
BLAKE2b-256 | c6429515026b884c7d5877c610082d35bcbad4f8ff4dfbf31aff0fe914f7ff3d |