【问题标题】:How to pass C++ function as callback to Python?如何将 C++ 函数作为回调传递给 Python?
【发布时间】:2021-02-23 21:56:43
【问题描述】:

我正在使用 Python 3 C API 与一些 Python 代码交互。

我已经使用 PyObject_Call 从 C++ 实例化了一个 Python 对象,并且我已经能够使用 PyObject_SetAttrString 修改它的一些属性。我要修改的属性之一是回调函数,如何从我的 C++ 函数之一实例化 Python 对象?

【问题讨论】:

  • 您不能将 C++ 函数发送到 Python 代码。您需要创建一个调用该函数的可调用 Python 对象。 (如果我理解正确你在问什么:/)
  • 这正是我所要求的。如何创建这个调用我的 C++ 函数的可调用 Python 对象?

标签: python c++ python-3.x callback python-c-api


【解决方案1】:

你需要做的是创建一个可调用的 Python 对象,当它被调用时,它最终会调用一个用 C(或 C++)实现的函数。

我将实现一个新类,如 Python Type Objects docs 中指定的那样。它可以实现您可能需要的任何类型的构造函数等,但最重要的是,它应该实现tp_call,这将使此类的实例可调用(就像在Python中实现了__call__方法一样) .

tp_call 的实现是用 C/C++ 实现的,您可以创建此类的实例,这些实例是 Python 对象,可以传递给任何 Python 代码。

另请参阅:Defining Extension Types: Tutorial

【讨论】:

    猜你喜欢
    • 2013-04-12
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 2013-06-06
    相关资源
    最近更新 更多