Implement dict() style constructor.

Already supported dict() and dict(mapping).
Now supports dict(itemsequence) and
Just van Rossum's new syntax for dict(keywordargs).

Also, added related unittests.

The docs already promise dict-like behavior
so no update is needed there.
This commit is contained in:
Raymond Hettinger 2002-11-22 00:07:40 +00:00
parent ba2cf078d2
commit 54405456e5
2 changed files with 11 additions and 3 deletions

View file

@ -1,9 +1,14 @@
"""A more or less complete user-defined wrapper around dictionary objects."""
class UserDict:
def __init__(self, dict=None):
self.data = {}
if dict is not None: self.update(dict)
def __init__(self, dict=None, **kwargs):
self.data = kwargs # defaults to {}
if dict is not None:
if hasattr(dict,'keys'): # handle mapping (possibly a UserDict)
self.update(dict)
else: # handle sequence
DICT = type({}) # because builtin dict is locally overridden
self.data.update(DICT(dict))
def __repr__(self): return repr(self.data)
def __cmp__(self, dict):
if isinstance(dict, UserDict):

View file

@ -19,6 +19,9 @@ uu0 = UserDict(u0)
uu1 = UserDict(u1)
uu2 = UserDict(u2)
verify(UserDict(one=1, two=2) == d2) # keyword arg constructor
verify(UserDict([('one',1), ('two',2)]) == d2) # item sequence constructor
# Test __repr__
verify(str(u0) == str(d0))