BTW:

In [7]: issubclass(set, frozenset)
Out[7]: False

In [8]: issubclass(frozenset, set)
Out[8]: False

no reason to do anything different here.

and:

In [13]: issubclass(MappingProxyType, abc.Hashable)
Out[13]: False

so yes, there is a need for something different

-CHB




On Thu, Oct 11, 2018 at 12:34 PM, Chris Barker <chris.bar...@noaa.gov>
wrote:

> On Thu, Oct 11, 2018 at 9:54 AM, Jonathan Fine <jfine2...@gmail.com>
> wrote:
>
>> Summary: Long post. Because of LSP, neither dict nor frozendict are a
>> subclass of the other.
>
>
> given Python's dynamic typing, these issues are kinda academic :-)
>
> > Intuition tells me that a frozen dictionary is a form of dictionary
>> > that adds restrictions, not that a dictionary is a frozen dictionary
>> > that you left out to thaw.
>>
>
> well, IIUC the Liskov principle correctly then a subclass is never a
> version of a class that does less, but rather always one that does more.
>
> Think you intuition may be driven by the choice of names and history: yes,
> a frozen dict sounds like a regular dict that has been altered
> (specifically frozen) -- but if we called them "hash_table" and
> "mutable_has_table", then your intuition may be different :-)
>
> As for subclassing or not, for most Python code is makes no difference --
> polymorphism is not achieved through subclassing. and the "Pythonic" way to
> test for type is through ABCs, and we already have Mapping and
> MutableMapping, which kind of surprised me, as there is no builtin Mapping
> that isn't also a MutableMapping.
>
> Notice that I said USEFUL property P. The negation Q of property P is
>> also a property.
>
>
> well, yeah, but I think the concept of "useful" is pretty vague.
>
> in this case, is "imutablilty" the "useful" property -- or is
> "hashability"?, which would want us to use abc.Hashable.
>
> So:
>
> I don't care what is or isn't a subclass of what -- I don't think that's a
> Pythonic question. But I do think :
>
> issubclass(frozendict, abc.Mapping) and issubclass(frozendict,
> abc.Hashable)
>
> would be useful.
>
> BTW, I just noticed that:
>
> A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target
> to check against. This is equivalent to ``issubclass(x, A) or issubclass(x,
> B) or ...`` etc.
>
> which seems less useful than "and" -- at least for ABCs
>
> I suppose that API pre-dates ABCs....
>
> One way to fix this in Python 4 would be to create a common ancestor,
>> which has only the shared methods of dict and frozendict.
>
>
> which would be an immutable, but not hashable, mapping ?!?
>
> Or do
>> something similar with abstract base classes.
>>
>
> already done -- see above.
>
> -CHB
>
>
> --
>
> Christopher Barker, Ph.D.
> Oceanographer
>
> Emergency Response Division
> NOAA/NOS/OR&R            (206) 526-6959   voice
> 7600 Sand Point Way NE   (206) 526-6329   fax
> Seattle, WA  98115       (206) 526-6317   main reception
>
> chris.bar...@noaa.gov
>



-- 

Christopher Barker, Ph.D.
Oceanographer

Emergency Response Division
NOAA/NOS/OR&R            (206) 526-6959   voice
7600 Sand Point Way NE   (206) 526-6329   fax
Seattle, WA  98115       (206) 526-6317   main reception

chris.bar...@noaa.gov
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to