![](https://secure.gravatar.com/avatar/fa0f7819f1825f596b384c19aa7dcf33.jpg?s=120&d=mm&r=g)
New submission from weapon <hongweichen8888@sina.com>: In the PEP 3119(https://www.python.org/dev/peps/pep-3119/),it introduce about Customizing instance and subclass checks.
The primary mechanism proposed here is to allow overloading the built-in functions isinstance() and issubclass(). The overloading works as follows: The call isinstance(x, C) first checks whether C.__instancecheck__ exists, and if so, calls C.__instancecheck__(x) instead of its normal implementation.
but my code doesn't works. ``` class Sizeable(object): def __instancecheck__(cls, instance): print("__instancecheck__ call") return hasattr(instance, "__len__") class B(object): pass b = B() print(isinstance(b, Sizeable)) # output:False ``` The __instancecheck__ function is not called. In PyObject_IsInstance,when isinstance(x, C) the following three conditions are reached, __instancecheck__ will take effect: 1. x can not be directly instantiated by C; 2. The C class specifies the metaclass; 3. The __instancecheck__ in the specified metaclass class is defined. This code can work: ``` class MetaSizeable(type): def __instancecheck__(cls, instance): print("__instancecheck__ call") return hasattr(instance, "__len__") class Sizeable(metaclass=MetaSizeable): pass class B(object): pass b = B() print(isinstance(b, Sizeable)) # output: False print(isinstance([], Sizeable)) # output: True ``` So,the problem is that the document does not conform to the reality.Can it be guaranteed that __instancecheck__ is always called? If yes: PyObject_IsInstance should be tweaked. If no: document should be tweaked. ---------- assignee: docs@python components: Documentation, Interpreter Core messages: 316118 nosy: docs@python, hongweipeng priority: normal severity: normal status: open title: Isinstance() behavior is not consistent with the document type: behavior versions: Python 3.7 _______________________________________ Python tracker <report@bugs.python.org> <https://bugs.python.org/issue33417> _______________________________________