ABCs -> infix syntax for isinstance() ?

Bruno Desthuilliers bdesth.quelquechose at
Tue Oct 7 21:20:58 CEST 2008

Boris Borcic a écrit :
> Bruno Desthuilliers wrote:
>>>> Boris Borcic a écrit :
>>>>> Given the ABC innovation, maybe an infix syntax for isinstance() would
>>>>> be good.
>>>>> Possibilities :
>>>>> - stealing "is" away from object identity. As a motivation, true use
>>>>> cases for testing object identity are rare;
>>>> "x is None" is a *very* common test. (...)
>>>> Testing a class identity often happens when writing metaclasses
>>> This kind-of-talks for Terry's proposition : adding a __contains__ to
>>> type,
>> I said "type identity testing", not isinstance() or issubclass() testing.
> Yes, but in the thread's context [of choosing between "is" and "in" as 
> infix syntax for isinstance()] you were in effect raising as an 
> objection to the first choice that it meant conflict with this use case 
> [of "type identity testing" which is "common when writing metaclasses"].
> This implied "writing metaclasses" as a background experience to decide 
> the issue, what in turn implied a preference for the second solution ("x 
> in Number") on *two* counts.

Oops, looks like I failed to read enough of the thread and missed the 
point. Sorry.


*If* Python was to grow an infix operator for isinstance, then I'd 
indeed rather use 'in' than 'is' (FWIW I'd even prefer an 'isa' 
operator, but...)

> First because it was a proposed alternative to what you were objecting 
> to, and
> Second because "x in Number" has this most simple "metaclassy" solution.
> (...)
>> And anyway, I don't see how any of the above address the point that 
>> your premise that "true identity testing is rare" is just wrong...
> I wrote "true use cases for identity testing are rare", it was more of 
> an auxiliary assertion that a premise, and nothing you objected really 
> disproved it  (for an adequate definition of "true use case").
> * writing metaclasses is rare,

For which definition of "rare" ?

> and so is testing class identity in its 
> context.

> * "x is None" is arguably

very arguably...

> not a "true use case", in the sense that it is 
> a case of testing identity against a constant


> that
> - doesn't compare equal to anything else
> - is the single instance of a singleton class

And ? How does it make it less a 'true use case' ???

> so that there exists both an equality test and an isinstance() test that 
> are equivalents to the identity test.

but are not idiomatic, and way slower.

FWIW, you didn't adress the use of a _marker sentinel object (another 
common use case - at least in quite a lot of library code I've been 
reading so far). And FWIW, I so far use 'is' *way* more often than 
'isinstance' (while this indeed may change with ABCs...).

Ok, you can clearly count me -10 wrt/ "stealing" the identity operator. 
If it matters, I'm -0 about using 'in' instead - at least, it makes 
sense wrt/ the semantics of 'in'. As far as I'm concerned, and if we 
really need an operator here, I'd prefer a new 'isa' one.

More information about the Python-list mailing list