[Pyrex] How do I subtype python internal type that is not part of a module?
Lenard Lindstrom
len-l at telus.net
Fri Apr 16 08:16:52 CEST 2004
I have enhanced my python interpeter to allow subtyping of python functions and wish to create
some extension types directly from PyFunction_Type. Unfortunately the type is not part of any
module. I have tried the following pyrex code:
# func.pyx
# Useful subtypes of function type.
cdef extern from "python.h":
ctypedef class function [object PyFunctionObject, type PyFunction_Type]:
pass
cdef object PyMethod_New(object func, object self, object type)
cdef class classfunction(function):
def __get__(self, obj, typ):
if typ is None:
typ = type(typ)
return PyMethod_New(self, typ, type(typ))
cdef class staticfunction(function):
def __get__(self, obj, typ):
return self
and it generates the following messages at compile time:
...\func.pyx:5:4: Module name required for 'extern' C class
...\func.pyx:5:4: Type object name specification not allowed for 'extern' C class
I cannot give a module name because there is none; the python 'types' and 'new' modules are
coded in python and use something like function = type(lambda: None) to get the function type.
Even that does not work:
# func.pyx
# Useful subtypes of function type.
cdef extern from "python.h":
object PyMethod_New(object func, object self, object type)
function = type(lambda: None)
.
.
.
...\func.pyx:7:16: Expected an identifier or literal
Any suggestions?
Lenard Lindstrom
<len-l at telus.net>
More information about the Pyrex
mailing list