如何在cython中使用cdefined元类?

时间:2014-05-28 02:05:01

标签: python cython metaclass

以下是我试图编译的cython文件的示例:

foobar.pxd

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

foobar.pyx

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错误。什么是合适的语法,还是有任何解决方法?

1 个答案:

答案 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的圣人

中找到真实的例子