dict literals vs dict(**kwds)
bdesth.quelquechose at free.quelquepart.fr
Sat May 27 00:57:08 CEST 2006
George Sakkis a écrit :
> Bruno Desthuilliers wrote:
>>George Sakkis a écrit :
>>>The thing is there are four (at least?) ways to get a dict instance:
>>This actually makes 2 (two) ways of creating a dict:
>>- the default call to type (ie : dict(...)
>>- the syntactic sugar dict-litteral syntax.
> Even without the syntactic-sugar form, I fail to see why you seem to
> think that dict(items), dict(otherdict) and dict(**kwds) are all one
Of course it's all one thing: a call to a callable that happens to be a
factory for dict instances.
>>>2) restricting in a more serious sense: the future addition of optional
>>>keyword arguments that affect the dict's behaviour.
>>This has already been discussed, and IIRC no-one managed to make a
>>*serious* point about it. The actual signature of dict() is perfectly
>>sensible for 99% of uses case, and I *never* had a need for "keyword
>>arguments that affect the dict's behaviour" in 6+ years of Python
>>If you want another behaviour, feel free to subclass dict or implement
>>your own dict-like - FWIW, that's what I do when the need arises.
> Me too, but I'd gladly toss them if one day dicts were extended to
> accept, say a default value or ordering.
Ordering ? What "ordering" ?
Anyway, there's no need to change the actual constructor for this - just
adding a factory would be enough:
d = dict.with_default(default)
But I'm actually -1 on this. I don't like the idea of a dict with
default values for non existing keys.
> Plus, adding new functionality
> by subclassing often leads to combinatorial explosion
Yes - and this is usually solved with either decorators (the design
pattern - not our beloved @decorators) and/or strategy.
Also, this is more of a statically-typed langages problem. With dynamic
typing, inheritance is only about implementation. Please re-read what I
said : "to subclass dict or implement your own dict-like". There was a
time when subclassing wasn't even an option.
> (think of "class
> OrderedDefaultPrettifiedDict(defaultdict, odict, prettydict)").
I don't know what is supposed to be a "prettydict". But even if your
monster class is dict-like, it's clearly not a dict no more.
More information about the Python-list