繁体   English   中英

如何在cython中使用cdefined元类?

[英]How does one work with cdefined metaclasses in cython?

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

foob​​ar.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

foob​​ar.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错误。 什么是适当的语法,或者有任何解决方法?

据我所知,您不能使用非type的元类扩展(cdef)类。 但是请注意,带有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中找到一个真实的例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM