One issue that's come up during PR review with Guido and Serhiy is, when 
evaluating `a | b`, whether or not the default implementation should call an 
overridden `copy()` method on `a` in order to create an instance of the correct 
subclass (rather than a plain-ol' `dict`). For example, `defaultdict` works 
correctly without any additional modification:

```
>>> from collections import defaultdict
>>> i = defaultdict(int, {1: 1, 2: 2})
>>> s = defaultdict(str, {2: "2", 3: "3"})
>>> i | s
defaultdict(<class 'int'>, {1: 1, 2: '2', 3: '3'})
>>> s | i
defaultdict(<class 'str'>, {2: 2, 3: '3', 1: 1})
```

So this has immediate benefits for both usability and maintenance: subclasses 
only need to override `copy()` to get working `__or__`/`__ror__` behavior. 
While this isn't what `list` and `set` do, for example, I argue that `dict` is 
more often subclassed, and we shouldn't blindly follow the precedent of their 
behavior when designing a new API for `dict`.

We decided to bring the discussion here to get input from a larger audience. 
I'm currently +0 on calling `copy()`, but I know Steven feels a bit more 
strongly about this than I do:

> I think the standard handling of subclasses in Python builtins is wrong, and 
> I don't wish to emulate that wrong behaviour without a really good reason. Or 
> at least a better reason than "other methods break subclassing unless 
> explicitly overloaded, so this should do so too". Or at least not without a 
> fight :-)

The more detailed thread of discussion starts at 
https://github.com/python/cpython/pull/12088#issuecomment-582609024 (note that 
we are no longer considering calling an overridden `update` method).
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/Z5SSGCH736UWHKFGJEZROH6VKPKXIT7W/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to