ABCs -> infix syntax for isinstance() ?
bdesth.quelquechose at free.quelquepart.fr
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
>> 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
*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'
> 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
> * "x is None" is arguably
> not a "true use case", in the sense that it is
> a case of testing identity against a constant
> - 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