将其他Cython绑定对象传递给Cython绑定对象上的方法

时间:2015-03-11 01:58:35

标签: python c cython

我有一个Cython类绑定到一个名为TagDetector的C库,我还有另一个类TagFamily,我希望能够实例化它传递消息:

td = TagDetector()
td.add_family(TagFamily('tag16h5'))

TagFamily在内部使用C库中的结构创建函数来设置指针变量self._tag_family。 如何在TagDetector上创建一个方法,我可以将TagFamily传递给_tag_family,然后提取{{1}} stuct并用它做什么?

1 个答案:

答案 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)