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 <1610524087.97.0.666044800779.issue42921@roundup.psfhosted.org>
In-reply-to
Content
`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)

```python
from functools import wraps
from typing import get_type_hints

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

@wraps(foo)
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 https://bugs.python.org/issue37838 (fixing `get_type_hints` not taking `wraps` in account at all), because inferred `Optional` is a kind deprecated feature (https://github.com/python/typing/issues/275).
History
Date User Action Args
2021-01-13 07:48:07joperezsetrecipients: + joperez
2021-01-13 07:48:07joperezsetmessageid: <1610524087.97.0.666044800779.issue42921@roundup.psfhosted.org>
2021-01-13 07:48:07joperezlinkissue42921 messages
2021-01-13 07:48:07joperezcreate