Closed
Description
Bug report
Bug description:
When running the following example:
from typing import Annotated, get_type_hints
class MessageCode(str):
pass
class DisplayName(str):
pass
class Message:
field_a: Annotated[str, MessageCode("A")]
class Form:
box_a: Annotated[str, DisplayName("A")]
hints = get_type_hints(Message, include_extras=True)
metadata = hints["field_a"].__metadata__[0]
print(f"MessageCode metadata type: {type(metadata)}")
hints = get_type_hints(Form, include_extras=True)
metadata = hints["box_a"].__metadata__[0]
print(f"DisplayName metadata type: {type(metadata)}")
the output will be:
MessageCode metadata type: <class '__main__.MessageCode'>
DisplayName metadata type: <class '__main__.MessageCode'>
when it should be:
MessageCode metadata type: <class '__main__.MessageCode'>
DisplayName metadata type: <class '__main__.DisplayName'>
This issue seems to occur only when:
- the metadata subclasses an immutable type
- when multiple instances of such metadata appear in different class definitions and they have the same value
CPython versions tested on:
3.9
Operating systems tested on:
Linux, Windows