我正在尝试运行一个 cython 示例,该示例比许多教程(例如本指南)中的示例要复杂一些。
这是一个最小的示例(请不要介意它没有太多功能)和重现我的问题的步骤:
有 c++ 类Rectangle和Group2(我把所有东西都放在 .h 文件中以使其更短):
// Rectangle.h
namespace shapes {
class Rectangle {
public:
Rectangle() {}
};
class Group2 {
public:
Group2(Rectangle rect0, Rectangle rect1) {}
};
}
然后创建一个grp2.pyx文件(在相同的文件夹在上述报头),与包装器Rectangle和Group2:
# RECTANGLE
cdef extern from "Rectangle.h" namespace "shapes":
cdef cppclass Rectangle:
Rectangle() except +
cdef class PyRectangle:
cdef Rectangle c_rect
def __cinit__(self):
self.c_rect = Rectangle()
# GROUP2
cdef extern from "Rectangle.h" namespace "shapes":
cdef cppclass Group2:
Group2(Rectangle rect0, Rectangle rect1) except +
cdef class PyGroup2:
cdef Group2 c_group2
def __cinit__(self, Rectangle rect0, Rectangle rect1):
self.c_group2 = Group2(rect0, rect1)
该扩展是通过setup.py我从命令行 ( python setup.py build_ext -i)调用的文件构建的:
from distutils.core import setup, Extension
from Cython.Build import cythonize
setup(ext_modules = cythonize(Extension(
name="grp2", # the extension name
sources=["grp2.pyx"], # the Cython source
language="c++", # generate and compile C++ code
)))
在这一点上我在错误_cinint_的PyGroup2:
无法将 Python 对象参数转换为“矩形”类型
我想我的 pyx 文件中有一些错误,但我不知道是什么。
梦里花落0921