[Python-Dev] Add a "transformdict" to collections
Serhiy Storchaka
storchaka at gmail.com
Wed Sep 11 12:37:53 CEST 2013
11.09.13 12:52, Antoine Pitrou написав(ла):
> Le Wed, 11 Sep 2013 12:38:13 +0300,
> Serhiy Storchaka <storchaka at gmail.com> a écrit :
>> 2. Subclassing.
>>
>> class CaseInsensitiveDict(TransformDict):
>> def transform(self, key):
>> return key.casefold()
>> d = CaseInsensitiveDict(Foo=5)
>
> I thought about this first, and then I remembered that python-dev isn't
> generally very keen on subclassing-based APIs :-)
Why? This way looks most natural to me.
>> 3. Type generator.
>>
>> d = TransformDict(str.casefold)(Foo=5)
>>
> [...]
>>
>> Third method allows you to customize other aspects of dict behavior
>> (combine OrderedDict, defaultdict,..).
>
> Well, no, it's not that easy. Especially since OrderedDict and
> defaultdict weren't written with combination in mind.
They can be rewritten.
Actually the defaultdict is just simple wrapper around existing
functionality of the __missing__ method. We can add the __transform__
method directly in the dict class. I think it will significant (2-3x)
decrease a size of needed C code (no need in defining new type with
constructors/destructors/etc, only lookup_transform).
More information about the Python-Dev
mailing list