Chanelling Guido - dict subclasses

Steven D'Aprano steve+comp.lang.python at pearwood.info
Tue Jan 14 20:27:36 EST 2014


Over on the Python-Dev mailing list, there is an ENORMOUS multi-thread 
discussion involving at least two PEPs, about bytes/str compatibility. 
But I don't want to talk about that. (Oh gods, I *really* don't want to 
talk about that...)

In the midst of that discussion, Guido van Rossum made a comment about 
subclassing dicts:

    [quote]
    From: Guido van Rossum <guido at python.org>
    Date: Tue, 14 Jan 2014 12:06:32 -0800
    Subject: Re: [Python-Dev] PEP 460 reboot

    Personally I wouldn't add any words suggesting or referring 
    to the option of creation another class for this purpose. You 
    wouldn't recommend subclassing dict for constraining the 
    types of keys or values, would you?
    [end quote]

https://mail.python.org/pipermail/python-dev/2014-January/131537.html

This surprises me, and rather than bother Python-Dev (where it will 
likely be lost in the noise, and certain will be off-topic), I'm hoping 
there may be someone here who is willing to attempt to channel GvR. I 
would have thought that subclassing dict for the purpose of constraining 
the type of keys or values would be precisely an excellent use of 
subclassing.


class TextOnlyDict(dict):
    def __setitem__(self, key, value):
        if not isinstance(key, str):
            raise TypeError
        super().__setitem__(key, value)
    # need to override more methods too


But reading Guido, I think he's saying that wouldn't be a good idea. I 
don't get it -- it's not a violation of the Liskov Substitution 
Principle, because it's more restrictive, not less. What am I missing?


-- 
Steven



More information about the Python-list mailing list