Hi, nice to meet you, everyone. I'm umedoblock. I'd like to call super() in c extension. I'd like to rewrite class Baa as c extension. Please see below code. Now, I can make super object.
But I cannot understand how to use super_init(), super_descr_get() and super_getattro(). Please please help me... ------------------------------------------------------------ baa.py class Baa(object): def __init__(self): print('call __init__() in Baa.') def sample(self): print('call sample() in Baa.') class Foo(Baa): def __init__(self): print('call __init__() in Foo.') super().sample() super().__init__() class Baz(Foo): def __init__(self): print('call __init__() in Baz.') super().__init__() -- pyfoo.c static int Foo_init(FooObject *self, PyObject *args, PyObject *kwds) { int ret = 0; PyTypeObject *super_type = &PySuper_Type; PyObject *super_obj; PyObject *empty_tuple; super_obj = super_type->tp_alloc(super_type, 0); empty_tuple = Py_BuildValue("()"); ret = super_type->tp_init(super_obj, empty_tuple, NULL); fprintf(stderr, "super_obj = %p\n", super_obj); PyObject_Print((PyObject *)super_obj, stderr, 0); fprintf(stderr, "\n\n"); fprintf(stderr, "super_type->tp_init(super_obj=%p, empty_tuple=%p, NULL)=%d\n", super_obj, empty_tuple, ret); return 0; } PyMODINIT_FUNC PyInit__foo(void) { PyObject *m; PyObject *import_baa = NULL, *Baa = NULL; PyObject *Baa_str; import_baa = PyImport_ImportModule("baa"); Baa_str = Py_BuildValue("s", "Baa"); Baa = PyObject_GetAttr(import_baa, Baa_str); Foo_Type.tp_base = (struct _typeobject *)Baa; Py_INCREF(Foo_Type.tp_base); Foo_Type.tp_new = Foo_new; if (PyType_Ready(&Foo_Type) < 0) return NULL; Py_INCREF(&Foo_Type); m = PyModule_Create(&Foo_module); if (m == NULL) return NULL; PyModule_AddObject(m, "Foo", (PyObject *)&Foo_Type); PyModule_AddStringConstant(m, "CONST", "C_EXTENSION"); return m; } -- http://mail.python.org/mailman/listinfo/python-list