[Python-ideas] Allow isinstance second argument to be a set of types

Alexander Belopolsky alexander.belopolsky at gmail.com
Thu Jul 7 02:02:22 CEST 2011


On Wed, Jul 6, 2011 at 7:35 PM, Benjamin Peterson <benjamin at python.org> wrote:
..
> Mm. I don't blame you. I'll speak code:
>
> class Evil(type):
>    def __iter__(self):
>        return range(42)
>
>
> class Accomplice(metaclass=Evil):
>    pass
>
> isinstance(12, Accomplice()) # boom if arbitrary iterables are allowed

What is "boom"?  If "boom" is a TypeError - it is to be expected.  For
example, with

def better_isinstance(object, classinfo):
    if isinstance(classinfo, (type, tuple)):
	return isinstance(object, classinfo)
    else:
	return any(isinstance(object, cls) for cls in classinfo)

I get:

>>> better_isinstance(12, Accomplice)
False

and

>>> better_isinstance(12, Accomplice())
Traceback (most recent call last):
 ..
TypeError: 'Accomplice' object is not iterable



More information about the Python-ideas mailing list