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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file get-annotations-0.1.2.tar.gz.
File metadata
- Download URL: get-annotations-0.1.2.tar.gz
- Upload date:
- Size: 4.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.2.0a2 CPython/3.9.9 Darwin/20.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da7b69b8043237cc7f7ce5919e9cc59bd18fc4e2704b43eb34e3ba4fa9374bab
|
|
| MD5 |
010dd12b1b454536150c83b5e45896bd
|
|
| BLAKE2b-256 |
616e265083c3bc64f17b7bc52e8c3720739841772e81b44272b8ba12d46a01ce
|
File details
Details for the file get_annotations-0.1.2-py3-none-any.whl.
File metadata
- Download URL: get_annotations-0.1.2-py3-none-any.whl
- Upload date:
- Size: 4.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.2.0a2 CPython/3.9.9 Darwin/20.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
788ba8aa2434ee34ffb985c4aea2f9e575204c884c0e0dd0f969be846470e527
|
|
| MD5 |
f028d6aa0b44d5345d69051bd7eefcf9
|
|
| BLAKE2b-256 |
c6429515026b884c7d5877c610082d35bcbad4f8ff4dfbf31aff0fe914f7ff3d
|