Hi all,

I may be thinking in the wrong direction, but right now
`PyType_Type.tp_new` will resolves the `metaclass` from the bases and
call:

    type = (PyTypeObject *)metatype->tp_alloc(metatype, nslots);

where `metatype` is actually resolved from the metatype of the bases.

In contrast `PyType_FromSpecWithBases` immediately calls:

    res = (PyHeapTypeObject*)PyType_GenericAlloc(&PyType_Type, 0);

So I am curious whether `PyType_FromSpecWithBases` should not do the
same thing, or as to why it does not?
I would also assume that it actually fails to inherit a possible
MetaClass completely, but I have not checked that.

That is the first question. The second, more important one, is whether
ExtensionMetaClasses are a thing at all? Is it reasonable to explore
them, or should I rather give up and use something more like ABCMeta,
which stores information in the `HeapType->tp_dict`, plus tag on
information to the actual instances as needed?
Right now it seems completely fine to me, except that the creation
itself is complicated (and a confusing, but its MetaClasses...).

I am exploring this for NumPy. PySIDE is using such things and wrangled
it into the limited API [1] (PySIDE needs to store a QT pointer
additionally). When I looked the code, I was fairly sure that this only
happened to work because Python allocates a slightly larger space
(effectively making it `nslots+1`, or 1 above).

As far as I can see, the only thing that happens if I use such an
ExtensionMetaClass is that I have a HeapType with a different
tp_basicsize. And I do not see why that should be any different than
a normal Python object.

Best,

Sebastian


[1] 
https://github.com/pyside/pyside2-setup/blob/5.11/sources/shiboken2/libshiboken/pep384impl_doc.rst#diversification

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/4Z47VDZUOEYBWFDKOKUBITG2PFRAWH23/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to