[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

AltStyle によって変換されたページ (->オリジナル) /