New submission from Terry J. Reedy <tjre...@udel.edu>:
Consider class Object defined as follows: import types class Type(type): __class__ = property({}.__getitem__, {}.__setitem__) class Object(metaclass=Type): __slots__ = '__class__' isinstance(Object, ob) is true for type and Type and false for anything else. But for the examples of the latter that I tried, (list, int, types.CodeType, types.MethodType, see attached tem3.py), it incorrectly raises KeyError: <class '__main__.Object'> I cannot find the C source for isinstance. In Python/bltinmodule.c, function builtin_isinstance_impl wraps retval = PyObject_IsInstance(obj, class_or_tuple); but grepping for PyObject_IsInstance in *.c and *.h only returned other calls. ---------- components: Interpreter Core files: tem3.py messages: 365774 nosy: terry.reedy priority: normal severity: normal stage: needs patch status: open title: isinstance(cls_with_metaclass, non_type) raises KeyError type: behavior versions: Python 3.7, Python 3.8, Python 3.9 Added file: https://bugs.python.org/file49034/tem3.py _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue40180> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com