[Python-Dev] Evil isinstance() (original) (raw)

Guido van Rossum guido@python.org
Sun, 31 Mar 2002 16:13:48 -0500


What I recommend, FWIW, until and unless PEP 246 eventuates and makes the world wonderful:

# if there's a specifically relevant special-method, such as int is for # int(), you can of course first try getting thearg.int -- if that # fails, or if nothing that relevant applies, you can then proceed with # something along the lines of: try: thearg+'' except TypeError: pass else: "do the stringlike case here" try: thearg+0 except TypeError: pass else: "do the numberlike case here"

I'm vaguely unhappy with catching exceptions here -- there might be side effects, and they may mask bugs in user-defined classes that try to implement add (especially since TypeError is a common symptom of a bug).

Why would you want your function to break if called with an instance of UserString, say, or a user-defined number type? Smooth polymorphism is high on the list of Python's strong points -- why break it, when you can preserve this excellent quality?

I'm for this; but it's hard to pick the right test in many cases. Many types define both str and int -- but either may lose information (in the case of a float, these both lose information!).

This leaves me in the uncomfortable position that I don't know what to recommend. :-(

--Guido van Rossum (home page: http://www.python.org/~guido/)