![](https://secure.gravatar.com/avatar/fe7a2e5aa555027343b8ab638d538b22.jpg?s=120&d=mm&r=g)
On 02/02/2021 14:18, Greg Ewing wrote:
On 3/02/21 12:07 am, Phil Thompson wrote:
On 01/02/2021 23:50, Greg Ewing wrote:
At the C level, there is always a *single* inheritance hierarchy.
Why?
Because a C struct can only extend one other C struct.
Yes - I misunderstood what you meant by "at the C level".
I want my C-implemented class's __new__ to support cooperative multi-inheritance
I don't think this is possible. Here is what the C API docs have to say about the matter:
-----------------------------------------------------------------------
Note
If you are creating a co-operative tp_new (one that calls a base type’s tp_new or __new__()), you must not try to determine what method to call using method resolution order at runtime. Always statically determine what type you are going to call, and call its tp_new directly, or via type->tp_base->tp_new. If you do not do this, Python subclasses of your type that also inherit from other Python-defined classes may not work correctly. (Specifically, you may not be able to create instances of such subclasses without getting a TypeError.)
-----------------------------------------------------------------------
(Source: https://docs.python.org/3.5/extending/newtypes.html)
This doesn't mean that your type can't be used in multiple inheritance, just that __new__ methods in particular can't be cooperative.
Thanks - that's fairly definitive, although I don't really understand why __new__ has this particular requirement. Phil