Anton Agestam <g...@antonagestam.se> added the comment:

As a consumer of `get_type_hints()` I think it'd be valuable to even have 
partially resolved types. My use case is that I provide an `Annotated` alias 
with a marker, and all I care about when inspecting user type hints is whether 
or not the arguments of an `Annotated` type contains my marker object. So 
ideally the fallback to an unresolved string or a sentinel object such as the 
proposed `typing.Unresolvable` should happen at the "lowest resolvable level" 
so that what can be resolved isn't lost.


By example, I'm saying that I think that this code:

    marker = object()

    def dec(cls):
        print(get_type_hints(cls))
        return cls

    @dec
    class A(abc.ABC):
        forward: Annotated[B, marker]

    class B:
        ...

Should produce:

    {"forward": Annotated[Unresolvable["B"], marker]}

I guess this would apply in situations where for instance a part of a union 
isn't resolvable too. If we have a union A|B where A is resolvable and B isn't, 
it should be resolved to:

    A | Unresolvable["B"]

And not to:

    Unresolvable["A | B"]

(I think for this perspective it's irrelevant whether unresolved types have a 
sentinel type or are just represented as strings).

(Here's the library that's my use case for the curious: 
https://github.com/antonagestam/abcattrs)

----------
nosy: +antonagestam

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue43463>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to