Why IterableUserDict?

Terry Reedy tjreedy at udel.edu
Sun Sep 19 01:08:57 CEST 2010


On 9/17/2010 11:12 PM, Steven D'Aprano wrote:
> I was writing some tests for a mapping class I have made, and I decided
> to run those same tests over dict and UserDict. The built-in dict passed
> all the tests, but UserDict failed one:

You forgot to specify Python version ;-).
>
> class SimpleMappingTest(unittest.TestCase):
>      type2test = UserDict.UserDict

In 3.x, collections.UserDict

>      def test_iter(self):
>          k, v = [0, 1, 2, 3], 'abcd'
>          m = self.type2test(zip(k, v))
>          it = iter(m)
>          self.assert_(iter(it) is it)
>          self.assertEquals(sorted(it), k)  # This line fails.

Not in 3.x

import collections
k, v = [0, 1, 2, 3], 'abcd'
m = collections.UserDict(zip(k, v))
it = iter(m)
assert iter(it) is it
assert sorted(it) == k

runs clean.

> If I look at the source code for the UserDict module, I discover that
> there's a second mapping class, IterableUserDict,

Not any more. One of numerous 3.x cleanups made possible by dropping 
obsessive back compatibility, which, as Peter explained, wan the reason 
for the hack.

-- 
Terry Jan Reedy




More information about the Python-list mailing list