我有一个Cython类绑定到一个名为TagDetector
的C库,我还有另一个类TagFamily
,我希望能够实例化它传递消息:
td = TagDetector()
td.add_family(TagFamily('tag16h5'))
TagFamily在内部使用C库中的结构创建函数来设置指针变量self._tag_family
。
如何在TagDetector
上创建一个方法,我可以将TagFamily
传递给_tag_family
,然后提取{{1}} stuct并用它做什么?
答案 0 :(得分:1)
您只需要将参数类型声明为TagFamily
类型,然后就可以访问所有属性。此外,您可能还希望阻止用户传递None
,这可以通过添加not None
来完成。请注意,调用TagFamily
后,示例中的add_family
实例将被解构。因为你的c结构也应该被删除,如果你想在add_family结束后继续使用c结构,你需要阻止它。从您的示例中我猜你的TagDetector
将包含一个系列列表,如果这是真的,避免这些内存管理问题的最简单方法是给TagDetector
一个Python列表,其中包含对所有标记系列的引用在TagDetector
。例如:
cdef class TagDetector:
cdef list families
def __init__(self):
self.families = []
def add_family(self, TagFamily family not None):
# prevent family from being deconstructed after add_family returns
self.families.append(family)
my_c_function(family._tag_family)