This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author joperez
Recipients joperez
Date 2021-01-13.07:48:07
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <>
`typing.get_type_hints` gives a different result for a wrapper created with `functools.wraps` in case of inferred `Optional` arguments (when the default value of the argument is None)

from functools import wraps
from typing import get_type_hints

def foo(bar: int = None): ...

def foo2(*args, **kwargs): ...

print(get_type_hints(foo))  # {'bar': typing.Optional[int]}
print(get_type_hints(foo2))  # {'bar': <class 'int'>}

This is because `get_type_hints` use the defauts of the wrapper (`foo2`) and not those of the wrapped function (`foo`).
This is not consistent with some other tools like `inspect.signature` which gives the same signature (and thus same default argument) for the wrapped function and its wrapper.

I think this case has simply been forgotten in the resolution of (fixing `get_type_hints` not taking `wraps` in account at all), because inferred `Optional` is a kind deprecated feature (
Date User Action Args
2021-01-13 07:48:07joperezsetrecipients: + joperez
2021-01-13 07:48:07joperezsetmessageid: <>
2021-01-13 07:48:07joperezlinkissue42921 messages
2021-01-13 07:48:07joperezcreate