Issue32227
Created on 2017-12-05 21:24 by lukasz.langa, last changed 2018-03-14 23:34 by lukasz.langa. This issue is now closed.
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 4733 | merged | lukasz.langa, 2017-12-05 21:26 | |
| PR 6114 | xiang.zhang, 2018-03-14 22:24 | ||
| Messages (8) | |||
|---|---|---|---|
| msg307686 - (view) | Author: Łukasz Langa (lukasz.langa) * | Date: 2017-12-05 21:24 | |
With the patch attached to this issue, @singledispatch gains support for passing the type in @register via annotations. This looks more natural and enables more thorough type checking without repeating yourself: @singledispatch def generic(arg): ... @generic.register def _(arg: str): ... @generic.register def _(arg: int): ... The previous API is still available for backwards compatibility, as well as stacking, and use with classes (sic, I was surprised to learn it's used that way, too). The patch should be uncontroversial, maybe except for the fact that it's importing the `typing` module if annotations are used. This is necessary because of forward references, usage of None as a type, and so on. More importantly, with PEP 563 it's mandatory. |
|||
| msg307690 - (view) | Author: Łukasz Langa (lukasz.langa) * | Date: 2017-12-05 21:40 | |
Guido, I know that you have a lot on your plate right now. Adding you because of PEP 443 and PEP 484. |
|||
| msg307691 - (view) | Author: Ivan Levkivskyi (levkivskyi) * | Date: 2017-12-05 21:42 | |
Idea looks interesting (like a basic runtime @overload). My expectation is that some changes are necessary in mypy for this to work properly. Another (minor) problem is that this creates a circular dependency functools <-> typing. |
|||
| msg307692 - (view) | Author: Ivan Levkivskyi (levkivskyi) * | Date: 2017-12-05 21:43 | |
Oops something wrong happened. |
|||
| msg307693 - (view) | Author: Łukasz Langa (lukasz.langa) * | Date: 2017-12-05 21:58 | |
> this creates a circular dependency functools <-> typing Well, it doesn't since I explicitly import typing inside singledispatch. By the time this import happens, functools is fully imported. This would only be a problem if functools itself tried to use singledispatch with annotations. Not impossible but super unlikely. |
|||
| msg308075 - (view) | Author: Łukasz Langa (lukasz.langa) * | Date: 2017-12-11 21:56 | |
New changeset e56975351bc2c574c728f738e88effba7116279f by Łukasz Langa in branch 'master': bpo-32227: functools.singledispatch supports registering via type annotations (#4733) https://github.com/python/cpython/commit/e56975351bc2c574c728f738e88effba7116279f |
|||
| msg311565 - (view) | Author: Cheryl Sabella (cheryl.sabella) * | Date: 2018-02-03 17:35 | |
Hello, I believe this could be closed as resolved? Do you think it should be added to the What's New? page for 3.7? |
|||
| msg311599 - (view) | Author: Ivan Levkivskyi (levkivskyi) * | Date: 2018-02-04 14:13 | |
> Do you think it should be added to the What's New? page for 3.7? I leave this up to Łukasz. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2018-03-14 23:34:12 | lukasz.langa | set | status: open -> closed resolution: fixed stage: patch review -> resolved |
| 2018-03-14 22:24:41 | xiang.zhang | set | stage: patch review pull_requests: + pull_request5882 |
| 2018-03-14 22:23:48 | lukasz.langa | link | issue27984 superseder |
| 2018-02-04 14:13:49 | levkivskyi | set | messages: + msg311599 |
| 2018-02-03 17:35:16 | cheryl.sabella | set | nosy:
+ cheryl.sabella messages: + msg311565 |
| 2017-12-11 21:56:33 | lukasz.langa | set | messages: + msg308075 |
| 2017-12-05 21:58:51 | lukasz.langa | set | messages: + msg307693 |
| 2017-12-05 21:43:57 | levkivskyi | set | nosy:
+ gvanrossum messages:
+ msg307692 |
| 2017-12-05 21:42:42 | levkivskyi | set | nosy:
+ levkivskyi, - gvanrossum messages: + msg307691 stage: patch review |
| 2017-12-05 21:40:04 | lukasz.langa | set | nosy:
+ gvanrossum messages:
+ msg307690 |
| 2017-12-05 21:26:44 | lukasz.langa | set | keywords:
+ patch stage: patch review pull_requests: + pull_request4636 |
| 2017-12-05 21:24:12 | lukasz.langa | create | |