This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2015年07月09日 13:41 by pitrou, last changed 2022年04月11日 14:58 by admin.
| Messages (9) | |||
|---|---|---|---|
| msg246493 - (view) | Author: Antoine Pitrou (pitrou) * (Python committer) | Date: 2015年07月09日 13:41 | |
singledispatch currently doesn't defend against unwanted redefinition of an existing specialization, e.g.: >>> def f(x): return "default" ... >>> f = functools.singledispatch(f) >>> @f.register(int) ... def _(x): return "1" ... >>> @f.register(int) ... def _(x): return "2" ... >>> f(42) '2' This can be annoying when used as an extension mechanism. It would be nice if at least an option in the singledispatch() constructor could prevent this. |
|||
| msg246506 - (view) | Author: Ethan Furman (ethan.furman) * (Python committer) | Date: 2015年07月09日 14:57 | |
Is it too late to have the default for that option be to not allow the replacement? That would be the safer course. |
|||
| msg246508 - (view) | Author: Antoine Pitrou (pitrou) * (Python committer) | Date: 2015年07月09日 15:15 | |
I don't know. I'm assuming some people actually want to redefine existing specializations. |
|||
| msg246510 - (view) | Author: Ethan Furman (ethan.furman) * (Python committer) | Date: 2015年07月09日 16:15 | |
Sure. I just saying that @f.register(int, replace=True) requires opt-in to replacing, whilst @f.register(int, replace=False) # don't replace if one already exists is still prone to bugs. |
|||
| msg246512 - (view) | Author: R. David Murray (r.david.murray) * (Python committer) | Date: 2015年07月09日 17:15 | |
Yes it is too late. You'd have to do a couple of deprecation cycles to change the default. |
|||
| msg246514 - (view) | Author: Antoine Pitrou (pitrou) * (Python committer) | Date: 2015年07月09日 17:45 | |
Ah, but I wasn't suggesting to add an argument to the .register() call, but to the singledispatch() call; i.e. it would be a function-wide parameter. |
|||
| msg246516 - (view) | Author: Ethan Furman (ethan.furman) * (Python committer) | Date: 2015年07月09日 18:30 | |
Ah, I see. So you say up-front if you are willing to have redefinition occur later. That doesn't feel like a consenting-adults attitude, and could also make testing harder. I prefer adding an option to the register method, and move towards making the default be "don't allow". If we don't want to go that route, would having singledispatch issue a warning on redefinition be sufficient? |
|||
| msg246528 - (view) | Author: Antoine Pitrou (pitrou) * (Python committer) | Date: 2015年07月09日 21:53 | |
Le 09/07/2015 20:30, Ethan Furman a écrit : > > That doesn't feel like a consenting-adults attitude, and could also make testing harder. Testing of what? The point is that it's the authority providing the generic function which decides how lenient extending the generic function is. That sounds rather reasonable to me... > I prefer adding an option to the register method, and move towards > making the default be "don't allow". But that default won't happen, for the compatibility reasons already explained. |
|||
| msg246529 - (view) | Author: Eric Snow (eric.snow) * (Python committer) | Date: 2015年07月09日 22:27 | |
I agree with Antoine. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:58:18 | admin | set | github: 68785 |
| 2015年07月21日 07:04:39 | ethan.furman | set | nosy:
- ethan.furman |
| 2015年07月09日 22:27:05 | eric.snow | set | nosy:
+ eric.snow messages: + msg246529 |
| 2015年07月09日 21:53:50 | pitrou | set | messages: + msg246528 |
| 2015年07月09日 18:30:56 | ethan.furman | set | messages: + msg246516 |
| 2015年07月09日 17:45:07 | pitrou | set | messages: + msg246514 |
| 2015年07月09日 17:15:53 | r.david.murray | set | nosy:
+ r.david.murray messages: + msg246512 |
| 2015年07月09日 16:15:44 | ethan.furman | set | messages: + msg246510 |
| 2015年07月09日 15:15:31 | pitrou | set | messages: + msg246508 |
| 2015年07月09日 14:57:14 | ethan.furman | set | nosy:
+ ethan.furman messages: + msg246506 |
| 2015年07月09日 13:41:12 | pitrou | create | |