Closed Hooksie closed 1 month ago
I have someone at the PyCon US sprints experimenting with this today, so hopefully we can figure out an implementation 😄
I have someone at the PyCon US sprints experimenting with this today, so hopefully we can figure out an implementation 😄
That's me :-)
According to this (https://docs.python.org/3/c-api/typeobj.html#c.PyTypeObject.tp_subclasses) seems tp_subclasses
is for internal use only. Maybe we should work on __bases__
and __mro__
first.
@Cheukting I was reading the docs, and noticed the same as well. I think exposing tp_subclasses
probably doesnt fall into the same category as the other two here. I think it's reasonable to disregard for now
Please note, am I generally unfamiliar with the Python C ffi layer, so please excuse any errors or weird assumptions.
I am prototyping a library in pyo3 that introspects type hierarchy when defining new types. In pure Python, i would do this through either
__bases__
or__mro__
(and in some rarer cases,__subclasses__()
).Since these all exist within the slots of the PyTypeObject, I wanted to be able to access these directly. Instead, it appears I need to call (for example)
cls.getattr("__bases__")
and then downcast to a tuple for safe code. Alternatively, I can useas_type_ptr()
but end up with unsafe code (and I'm still not sure this is a good idea).Ideally, it would be nice to have
PyType::bases
(accessingtp_bases
),PyType::mro
(accessingtp_mro
), andPyType::subclasses
(accessingtp_subclasses
) available as higher-level APIs.