[Python-bugs-list] [ python-Bugs-824854 ] dict.__init__ doesn't call subclass's __setitem__.

SourceForge.net noreply at sourceforge.net
Thu Oct 16 10:50:21 EDT 2003


Bugs item #824854, was opened at 2003-10-16 15:27
Message generated for change (Comment added) made by mwh
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=824854&group_id=5470

Category: None
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Jeremy Fincher (jemfinch)
>Assigned to: Guido van Rossum (gvanrossum)
Summary: dict.__init__ doesn't call subclass's __setitem__.

Initial Comment:
The easiest way to describe this is with the code I was
using that uncovered this bug:

class TwoWayDictionary(dict):
    __slots__ = ()
    def __setitem__(self, key, value):
        dict.__setitem__(self, key, value)
        dict.__setitem__(self, value, key)

I suspected this bug might happen, so I wrote this test:

class TwoWayDictionaryTestCase(unittest.TestCase):
    def testInit(self):
        d = TwoWayDictionary(foo='bar')
        self.failUnless('foo' in d)
        self.failUnless('bar' in d)

Basically, dict.__init__ is calling dict.__setitem__
even in subclasses.

----------------------------------------------------------------------

>Comment By: Michael Hudson (mwh)
Date: 2003-10-16 15:50

Message:
Logged In: YES 
user_id=6656

I honestly don't know.  I slightly doubt it.

It would probably be PEP material.

I wonder what Guido thinks...

----------------------------------------------------------------------

Comment By: Jeremy Fincher (jemfinch)
Date: 2003-10-16 15:41

Message:
Logged In: YES 
user_id=99508

If someone went to the trouble to be able to define what
"kermel methods" are used in the dict/list/whatever else
implementations, would it even be accepted, or would it be
considered too useless/slow/etc. to be bothered with?

----------------------------------------------------------------------

Comment By: Michael Hudson (mwh)
Date: 2003-10-16 15:33

Message:
Logged In: YES 
user_id=6656

.update() won't call TwoWayDictionary.__setitem__ either. 
Ditto .setdefault.

You'll see similar behaviour for lists too.

AFAIK, nowhere do the Python docs promise that the
dictionary implementation is defined in terms of certain
"primitive methods".  You may think this a bug, but it's a
whole lotta work to "fix" it.

FWIW, you might be happier using UserDict.DictMixin.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=824854&group_id=5470



More information about the Python-bugs-list mailing list