[英]How does one work with cdefined metaclasses in cython?
以下是我尝试编译的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
错误。 什么是适当的语法,或者有任何解决方法?
据我所知,您不能使用非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.