New submission from Peilonrayz <peilonr...@gmail.com>:

The documentation for `typing.overload` says in a non-stub file the last 
definition shouldn't be typed. However running that through `mypy --strict` 
fails. I opened an issue on mypy a couple of days ago, however was told to 
report this on CPython.

```
>>> import typing
>>> help(typing.overload)
Help on function overload in module typing:

overload(func)
    Decorator for overloaded functions/methods.
    
    In a stub file, place two or more stub definitions for the same
    function in a row, each decorated with @overload.  For example:
    
      @overload
      def utf8(value: None) -> None: ...
      @overload
      def utf8(value: bytes) -> bytes: ...
      @overload
      def utf8(value: str) -> bytes: ...
    
    In a non-stub file (i.e. a regular .py file), do the same but
    follow it with an implementation.  The implementation should *not*
    be decorated with @overload.  For example:
    
      @overload
      def utf8(value: None) -> None: ...
      @overload
      def utf8(value: bytes) -> bytes: ...
      @overload
      def utf8(value: str) -> bytes: ...
      def utf8(value):
          # implementation goes here
```

The typing docs and PEP 484 say similar things.  
typing docs - https://docs.python.org/3/library/typing.html#typing.overload  
PEP 484 - https://www.python.org/dev/peps/pep-0484/#function-method-overloading

Jelle Zijlstra told me to report this here. 
https://github.com/python/mypy/issues/9633#issuecomment-716201251

> You should annotate the implementation. The example in the typing docs should 
> perhaps also add an annotation, but that's an issue for the CPython repo, not 
> for mypy.

Either way mypy errors which can be seen in the following playgrounds.

docs - 
https://mypy-play.net/?mypy=latest&python=3.9&flags=strict&gist=cffb94a2de9d5d55142da5e7d960102f
```
main.py:9: error: Function is missing a type annotation
Found 1 error in 1 file (checked 1 source file)
```

proper way? - 
https://mypy-play.net/?mypy=latest&python=3.9&gist=bfadffe92571b4faad04ea151b2b1c54
```
main.py:3: error: An overloaded function outside a stub file must have an 
implementation
Found 1 error in 1 file (checked 1 source file)
```

Is all the documentation on `typing.overload` wrong - should the implementation 
be annotated?

----------
assignee: docs@python
components: Documentation
messages: 379754
nosy: docs@python, peilonrayz
priority: normal
severity: normal
status: open
title: Apparently all documentation on @typing.overload is wrong
versions: Python 3.10, Python 3.6, Python 3.7, Python 3.8, Python 3.9

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

Reply via email to