[docs] [issue33417] Isinstance() behavior is not consistent with the document
weapon
report at bugs.python.org
Thu May 3 06:30:05 EDT 2018
New submission from weapon <hongweichen8888 at 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 at python
components: Documentation, Interpreter Core
messages: 316118
nosy: docs at 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 at bugs.python.org>
<https://bugs.python.org/issue33417>
_______________________________________
More information about the docs
mailing list