On Tue, 20 Dec 2022 at 20:20, Steven D'Aprano <st...@pearwood.info> wrote:
>
> On Mon, Dec 19, 2022 at 05:53:38PM -0800, Ethan Furman wrote:
>
> > Personally, every other time I've wanted to subclass a built-in data type,
> > I've wanted the built-in methods to return my subclass, not the original
> > class.
>
> Enums are special. But outside of enums, I cannot think of any useful
> situation where the desirable behaviour is for methods on a subclass to
> generally return a superclass rather than the type of self.
>
> Its normal behaviour for operations on a class K to return K instances,
> not some superclass of K. I dare say there are a few, but they don't
> come to mind.

How should it do that, if the constructor for K has a different
signature from the constructor for K's superclass that is providing
the method? How is the superclass to know how to return a K?

Should the vanilla dict.__or__ method be able to take two defaultdicts
and return a defaultdict, or is it reasonable to demand that, in this
situation, defaultdict needs to define the method itself?

>>> defaultdict(list) | defaultdict(list)
defaultdict(<class 'list'>, {})
>>> defaultdict.__or__
<slot wrapper '__or__' of 'collections.defaultdict' objects>

I'm not sure how dict.__or__ would be expected to cope with this situation.

Yes, I'm sure it would be convenient. It would also have some
extremely annoying consequences.

ChrisA
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/OR7C52ZC2CN7SCPEGCNBSKFODV5OTFZD/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to