以下是我试图编译的cython文件的示例:
cdef extern from 'object.h':
ctypedef class __builtin__.type [object PyHeapTypeObject]:
pass
cdef class _A(type):
pass
cdef class A #Forward Declaration
cdef class B(A):
pass
cdef class _A(type):
def __init__(metaself, name, **args):
super(_A, metaself).__init__(name, *args)
print name
A = _A('A', (object,), {})
cdef class B(A):
pass
当我尝试编译它们时,我收到AnalyseDeclarationsTransform
错误。什么是合适的语法,还是有任何解决方法?
答案 0 :(得分:0)
据我所知,你不能拥有一个扩展(cdef)类,其中的元类不是type
。但请注意,具有cdef元类的常用类是完全正确的。我不确定你想要达到的目标,但以下是可以的:
cdef extern from 'object.h':
ctypedef class __builtin__.type [object PyHeapTypeObject]:
pass
cdef class _A(type):
pass
和
cdef class _A(type):
def __init__(metaself, name, **args):
super(_A, metaself).__init__(name, *args)
print name
A = _A('A', (object,), {})
class B(A): # use a non cdef class
pass
您可以在classcall_metaclass的圣人
中找到真实的例子