Hi Gavin, You have Reply To set to your personal email address instead of allowing replies to go to the list for everyone to contribute to the discussion. Was that intentional?
On Fri, May 01, 2020 at 04:53:31PM -0000, gbs--- via Python-ideas wrote: > In cases where it makes sense to do explicit type checking (with ABCs > or whatever), I really detest the look of the isinstance() function. Is it just the `isinstance` function you detest, or all functions? If it's just `isinstance`, then you can alias it: is_a = isinstance if is_a(thing, Fruit): # yuck this is worse but if it is all functions, then I think you have no choice but to either live with it or shift languages, because the syntax for functions is too deeply baked into Python to change now. [...] > What I really want to write is: > > if thing is a Fruit and thing is not an Apple: > > and after thinking about it on and off for a while I wonder if it > might indeed be possible to teach the parser to handle that in a way > that eliminates almost all possible ambiguity with the regular "is", > including perhaps 100% of all existing standard library code and > almost all user code? Whether it is possible is only half the question. Whether it is desirable is the other half. My first language was Apple's Hypertalk back in the 1990s, which used a very English-like syntax where things like "is a" would have been right at home. For example: if there is a file "myfile.pct" then ... Functions could be written in either traditional parenthesized format, or English-like prefix operator syntax: root = sqrt(value) put the sqrt of value into root It's been two decades since I've last written a line of Hypertalk code and I still miss it :-) so I'm definitely sympathetic to your request. But I fear that few others will be. If we wanted this new operator, I think it should combine isinstance and issubclass: obj is a T should be equivalent to: issubclass(obj, T) if isinstance(obj, type) else isinstance(obj, T) and T is a type or tuple of types. The rules in English for when to use "a" versus "an" depend on the *sound* of the following word, not the initial letter. Blindly applying the rule "an before vowels otherwise a" is wrong: an uncle # correct an unicorn # wrong so I propose that the interpreter allow either, and we leave it to the programmer and/or linters to enforce good English grammar: obj is an int obj is an float # accepted by interpreter obj is a int # also accepted by interpreter In other words, the "is-a" operators would become: is a[n] is not a[n] The above is the easy part. The hard part is justifying why this should become an operator. > Maybe this has been considered at some point in the past? The "is > [not] a|an" proposal would at least be a strong contender for "hardest > thing to search for on the internet" lol. Indeed :-) But for what it's worth, I don't remember coming across this myself. -- Steven _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/WPMJBKBNR3PQFFDXWUYJ32OUJRTMBXWP/ Code of Conduct: http://python.org/psf/codeofconduct/