issubclass(dict, Mapping)
Ethan Furman
ethan at stoneleaf.us
Wed Dec 22 12:19:26 EST 2010
kj wrote:
> In a message (<4cf97c94$0$30003$c3e8da3$5496439d at news.astraweb.com>)
> on a different thread, Steven D'Aprano tells me:
>
>> I suspect you're trying to make this more complicated than it actually
>> is. You keep finding little corner cases that expose implementation
>> details (such as the heap-types issue above) and leaping to the erroneous
>> conclusion that because you didn't understand this tiny little corner of
>> Python's class model, you didn't understand any of it. Python's object
>> model is relatively simple, but it does occasionally expose a few messy
>> corners.
>
> I disagree with your assessment. What you call "little corner
> cases" I call "fundamental", as in "you can't really call yourself
> competent with Python if you're ignorant about them".
So where on the sliding scale do you place 'competent'? It sounds to me
like you are looking at 'master'.
> Here's another example, fresh from today's crop of wonders:
>
> (v. 2.7.0)
>>>> from collections import Mapping
>>>> issubclass(dict, Mapping)
> True
>>>> dict.__bases__
> (<type 'object'>,)
>>>> [issubclass(b, Mapping) for b in dict.__bases__]
> [False]
Firstly, as I'm sure you know, if you don't import Mapping from
collections the issubclass test fails with a NameError.
Secondly, why do you care? Did you get bitten by something? Some
error, or worse, silently got wrong results? (Sincere question.)
> So dict is a subclass of Mapping, even though none of the bases of
> dict is either Mapping or a subclass of Mapping. Great.
>
> I suspect this is another abstraction leak
My take on abstraction leaks is when the underlying actuality shows
through in a non-ignorable way -- so I ask again, how is this
discrepancy making it so you can't ignore it?
~Ethan~
More information about the Python-list
mailing list