[issue5402] MutableMapping code smell (see OrderedDict)
Jim Jewett
report at bugs.python.org
Mon Mar 2 05:10:55 CET 2009
New submission from Jim Jewett <jimjjewett at users.sourceforge.net>:
Copy of issue 5397
In python 3, UserDict (and DictMixin) are gone; presumably they should
be replaced by either a dict subclass or the ABC MutableMapping.
Unfortunately, there doesn't seem to be a clean way to inherit from
both.
In python 2.x, you could write
class MyDict(DictMixin, dict): ...
but with
class MyDict(MutableMapping, dict): ...
MutableMapping explicitly overrides __getitem__, __setitem__, and
__delitem__ to raise a KeyError.
The OrderedDict implementation in issue 5397 puts the concrete class
first, and then handles composite methods manually, by either rewriting
them (repr, copy) or explicitly delegating past dict and straight to
MutableMapping (setdefault, update, etc.)
Both solutions seem fragile.
Unfortunately, the closest I come to a solution is to split the ABC
into a Mixin portion and an ABC enforcer.
# The concrete methods of the current ABC
class MapMixin:
# The abstract methods that get checked
class MutableMapping(MapMixin):
# Trust that dict will always implement
# all required concrete methods for us
class MyDict(MapMixin, dict):
----------
components: Library (Lib)
messages: 82999
nosy: aronacher, georg.brandl, jimjjewett, pitrou, rhettinger
severity: normal
status: open
title: MutableMapping code smell (see OrderedDict)
versions: Python 3.1
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue5402>
_______________________________________
More information about the Python-bugs-list
mailing list