New submission from Jim Fasarakis-Hilliard: Currently the first lines in PyObject_IsSubClass are:
/* We know what type's __subclasscheck__ does. */ if (PyType_CheckExact(cls)) { /* Quick test for an exact match */ if (derived == cls) return 1; return recursive_issubclass(derived, cls); } The if (derived == cls) runs only if PyType_CheckExact is True which doesn't hold for any classes with a custom metaclass. As a result, a check of the form issubclass(Sequence, Sequence) will take a slow path that invokes __subclasscheck__. I'm not sure if this was placed inside there due to some wild edge-case, though. PyObject_IsInstance uses the same trick and does so outside the if (PyType_CheckExact(cls)) check. I'll gladly submit a PR if this indeed needs fixing and not by design. ---------- components: Interpreter Core messages: 292764 nosy: Jim Fasarakis-Hilliard priority: normal severity: normal status: open title: Move quick test in PyObject_IsSubClass outside if PyType_CheckExact guard type: behavior versions: Python 3.7 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue30230> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com