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

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

TagFamily在内部使用C库中的struct创建函数来设置指针变量self._tag_family
我怎样才能在TagDetector上建立一个方法,把aTagFamily传递给它,然后提取出_tag_familystuct并用它做填充?

最佳答案

您只需要将参数的类型声明为TagFamily类型,就可以访问所有属性此外,您可能还希望防止用户传递None,这可以通过添加not None来完成注意,在调用TagFamily之后,示例中的add_family实例将被解构由于您的c结构也应该被删除,如果您想在add_系列结束后继续使用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)

10-06 10:24