On 22 October 2015 at 19:51, Guido van Rossum <[email protected]> wrote:
> On Thu, Oct 22, 2015 at 2:21 AM, Gregory P. Smith <[email protected]> wrote:
>> What would it Foo.__getitem__.__annotations__ contain in this situation?
>> It'd unfortunately be an empty dict if implemented in the most trivial
>> fashion rather than a dict containing your Unions... Do we care?
>
> Initially it would indeed be {}. Once we have a true multi-dispatch PEP we
> can iterate, both on how to spell it (perhaps the final __getitem__ needs an
> @overload as well) and on what happens in the annotations (or at least, what
> typing.get_type_hints() returns).
Just ensuring I understand the problem with using a third @overload in
the spelling from the start:
class Foo(Generic[T]):
@overload
def __getitem__(self, i: int) -> T: ...
@overload
def __getitem__(self, s: slice) -> Foo[T]: ...
@overload
def __getitem__(self, x):
<actual implementation goes here>
If we did this, the implied annotation on the last method would be:
@overload
def __getitem__(self, x: Any) -> Any:
<actual implementation goes here>
which gets the signature wrong - this isn't an Any:Any mapping, it's a sequence.
Leaving the "@overload" out thus indicates that the definition is an
implementation of the preceding type based dispatch declaration,
rather than a new overload.
Assuming a future multidispatch implementation used
"functools.multidispatch" as the decorator (to complement the existing
functools.singledispatch) rather than "typing.overload", this seems
like a reasonable short term solution to me.
Cheers,
Nick.
--
Nick Coghlan | [email protected] | Brisbane, Australia
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com