[Python-ideas] OrderedCounter and OrderedDefaultDict

Sven R. Kunze srkunze at mail.de
Wed Oct 21 22:56:41 CEST 2015


On 21.10.2015 21:27, Andrew Barnert wrote:
> On Oct 21, 2015, at 11:25, Jonathan Slenders <jonathan at slenders.be> wrote:
>> Just want to say that I'm happy to see that lately the disadvantages of inheritance (which are already known for a very long time) are getting more attention.
>> It's not bad by definition, but there's so much truth in Sandy her talk and I think for many Python projects, we went way too far into "abusing" inheritance.
>> Actually, it's a bit unfortunate that we made inheritance so user friendly and powerful in Python that for many people it became the logical way to extend or reuse some code.
> One of the most important things people have learned about OO over the past two decades is that subtyping, implementation extension, and implementation mixins, and interface-extending mixins (think collections.abc.Sequence adding count for you) are all different things. Compared to the other languages in existence at the time of Python 1.x or even the 2.2/2.3 changeover, it's hard to fault Python. The fact that it can easily be used to write bad code is a little unfortunate, but the fact that it can also easily be used to write good code, when other languages either don't allow some things to be expressed, force them to be expressed in clumsy or limited ways, or force you to misuse inappropriate features instead more than makes up for it. In particular, any language that has fixed structure layouts and vtables makes is much more unfriendly to both kinds of mixins, and makes interface subtyping clumsy; Python has no such problems. Yeah, maybe we could design something better in 2015, but based on the knowledge people had at the time?

True. Just because everything is possible does not necessarily mean one 
should do it.


@Jonathan
Inheritance has its disadvantages. The bigger the class hierarchy, the 
uglier it becomes. (We have this with the django view class system.)

I see the same coming for the dict discussion if people insist on having 
separate leaf classes for all possible orthogonal aspects. That does not 
scale and it's hard to test ( --> @core-devs ).


Something that's become clearer and clearer to me is that *nobody could 
have known this in advance*. It seemed like a good idea to start with 
several different base classes for each aspect (not knowing that they 
could be combine later). But now, people start to realize they might 
need these different aspects in a single implementation.

So, it's the time to think about how to solve it in a scalable and 
maintainable way. Multiple inheritance might be a solution, composition 
is another. This time I think composition is the better one.


Best,
Sven


PS: Funny coincidence, Sandi uses the aspect "order" for the house. The 
same as a dict could have an aspect "order".
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20151021/1f8606a9/attachment.html>


More information about the Python-ideas mailing list