I can't speak for Guido but I think it is messy and unnatural and will lead to user frustration. As a user, I would expect a dict to take any hashable as key and any object as value when using one. I would probably just provide a __getitem__ method in a normal class in your case.
This said I have overriden dict before, but my child class only added to dict, I didn't change it's underlying behaviour so you can use my class(es) as a vanilla dict everywhere, which enforcing types would have destroyed. On 01:27 15/01 , Steven D'Aprano wrote: >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 <gu...@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 > -- yrNews Usenet Reader for iOS http://appstore.com/yrNewsUsenetReader -- https://mail.python.org/mailman/listinfo/python-list