Python C-API: how to define nested classes?

Stefan Behnel stefan_ml at behnel.de
Fri May 17 01:16:25 EDT 2013


Serge WEINSTOCK, 16.05.2013 10:55:
> I'm currently writing a C extension module for python using the "raw" C-API. I would like to be able to define "nested classes" like in the following python code
> 
> ============================================================
> class A:
>     class B:
>         def __init__(self):
>             self.i = 2
>     def __init__(self):
>         self.b = A.B()
> a = A()
> b = A.B()
> print(a.b.i)
> print(b.i)
> ============================================================
> 
> How can I create such nested class with the C-API?

Assuming you really mean Python classes and not extension types, you might
get away with defining them separately and then assigning

   A.B = B

Recent Python versions added a __qualname__ attribute for classes that you
might want to fix up in this case.

If you need better compatibility, consider writing your code in Cython.

Stefan





More information about the Python-list mailing list