gpt4 book ai didi

python - 将其他 Cython 绑定(bind)对象传递给 Cython 绑定(bind)对象上的方法

转载 作者:太空宇宙 更新时间:2023-11-03 23:47:41 26 4
gpt4 key购买 nike

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

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

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

最佳答案

您只需将参数的类型声明为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)

关于python - 将其他 Cython 绑定(bind)对象传递给 Cython 绑定(bind)对象上的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28977310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com