我有一个Cython类绑定到一个C库,名为TagDetector
,还有一个类TagFamily
,我希望它能够实例化并传递这样的消息:
td = TagDetector()
td.add_family(TagFamily('tag16h5'))
TagFamily在内部使用C库中的struct创建函数来设置指针变量
self._tag_family
。我怎样才能在
TagDetector
上建立一个方法,把aTagFamily
传递给它,然后提取出_tag_family
stuct并用它做填充? 最佳答案
您只需要将参数的类型声明为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)