[Python-ideas] OrderedCounter and OrderedDefaultDict
Terry Reedy
tjreedy at udel.edu
Thu Oct 22 03:11:33 CEST 2015
On 10/21/2015 1:41 PM, Sven R. Kunze wrote:
> On 21.10.2015 00:50, Chris Angelico wrote:
>> She recommends a massive superclass that's capable of any form of injection
>
> Nope. She does not.
>
> The "superclass" is not "massive" at all. It is even slimmer as
> orthogonal aspects are refactored out into separate entities. In fact,
> it makes it even easier to test and maintain these separate aspects (the
> core dev should be interested in that). Furthermore, it's, of course, up
> to debate which aspects should be injectable and which are not.
The dict class itself is, in a sense, a poor example for this
discussion. It is a critical part of Python's infrastructure, involved
in a large fraction of executed statements. It therefore needs to be as
fast as possible. For CPython, this means a heavily optimized C
implementation that disallows injection and that takes shortcuts like
bypassing method lookups. This makes the usefulness of subclassing limited.
Of course, before 2.2, dict (and other built-in types) could not even be
subclassed. UserDict is the 'user base dict class', meant to be
subclassed by users. A solution to UserDict being too slow could be a C
accelerator that did not bypass method lookups. A revised UserDict
could be designed for injection in the way being discussed.
--
Terry Jan Reedy
More information about the Python-ideas
mailing list