From 54405456e5c2b76879472051c23e6c1c9f433beb Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 22 Nov 2002 00:07:40 +0000 Subject: 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. --- Lib/UserDict.py | 11 ++++++++--- Lib/test/test_userdict.py | 3 +++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Lib/UserDict.py b/Lib/UserDict.py index 96f049d..02ddfc4 100644 --- a/Lib/UserDict.py +++ b/Lib/UserDict.py @@ -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): diff --git a/Lib/test/test_userdict.py b/Lib/test/test_userdict.py index a59419d..b561ac1 100644 --- a/Lib/test/test_userdict.py +++ b/Lib/test/test_userdict.py @@ -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)) -- cgit v0.12