Python 3 isinstance

Terry Reedy tjreedy at udel.edu
Thu Jan 15 20:47:29 CET 2009


Duncan Booth wrote:
> Terry Reedy <tjreedy at udel.edu> wrote:
> 
>> Lambert, David W (S&T) wrote:
>>> Overly terse.  I do mean that this is illegal:
>>>
>>> isinstance(s, {str, bytes})
>>>
>>> tuples have order, immutability, and the possibility of repeat items.
>>>
>>> A set is most reasonable in a mathematical sense.
>> I agree.  However, isinstance predates set.  Hence the status quo.
>>
>>
> 
> There is another reason which nobody has mentioned, and which might make it 
> tricky to do a good implementation that does accept sets.
> 
> The second argument to isinstance or issubclass is a classinfo where a 
> classinfo is either a class or a tuple of classinfo. This makes it easy to 
> group related types: you can just combine existing groups of types together 
> without having to flatten tuples. The immutability of tuples guarantees 
> that you cannot create a recursive structure this way.
> 
> If you allow sets then the code which traverses the classinfo has to 
> protect itself against the possibility of an infinite recursion.
> 
> The same argument also applies to exception handlers which also accept a 
> type or a tuple of things they accept. 
> 
> Of course you could allow either an existing classinfo or a set of types, 
> but not allow the set to contain anything other than types. That would 
> still prevent recursion but means you have to be stricter about knowing 
> what you are combining. That probably wouldn't be a bad thing if everyone 
> used sets consistently but I suspect would be messy if introduced at this 
> stage.

Nice explanation.  A mathematical set is a frozen set of course (except 
that mathematical sets can also be recursive! -- depending on the 
particular set theory), and there is no literal syntax for that.




More information about the Python-list mailing list