如何在 Python 中使用 C++ 类?
Posted
技术标签:
【中文标题】如何在 Python 中使用 C++ 类?【英文标题】:How can I use C++ class in Python? 【发布时间】:2009-03-02 14:47:11 【问题描述】:我已经用 C++ 实现了一个类。我想将它与 Python 一起使用。 请建议分步方法并详细说明每个步骤。 像这样的……
class Test
private:
int n;
public:
Test(int k)
n=k;
void setInt(int k)
n = k;
int getInt()
return n;
;
现在,在 Python 中
>>> T1 = Test(12)
>>> T1.getInt()
12
>>> T1.setInt(32)
>>> T1.getInt()
32
请建议。我该怎么做? 注意:我想知道手动方式来做到这一点。我不想要任何第三方库依赖。
【问题讨论】:
只是好奇 - 为什么要避免第三方? 【参考方案1】:查看Boost.Python。这是一个用 C++ 编写 python 模块的库。
还可以查看SWIG,它还可以处理其他脚本语言的模块。我过去曾用它为我的班级编写模块并在 python 中使用它们。效果很好。
您可以使用Python/C API 手动完成,自己编写界面。这是相当低级的,但是您将获得很多关于 Python 在幕后工作的额外知识(而且当您使用 SWIG 时您将需要它)。
【讨论】:
不满足“我不想要任何第三方库依赖”的要求。 无论如何你都需要python库。它当然包括 python/c api。【参考方案2】:ctypes 很好。它非常易于使用,并且是 Python 的标准配置。不幸的是,它只能与具有 C 风格接口的共享库 (Unix) 或 DLL (Windows) 通信,这意味着您不能直接与 C++ 对象交互。但是您可以使用句柄系统,其中句柄引用特定对象。
>>> getInt(h)
12
我认为这很简单,易于理解,并且不需要额外的库。
【讨论】:
您能否详细说明“您无法与共享库或 DLL 通信,这意味着您无法直接与 C++ 对象交互”是什么意思?在 Python 中使用 C++ 对象时,什么会改变行为?会不会有明显的影响?我最终需要在 Python 中编写与我的 C++ API 的绑定,提前感谢您的帮助。 @2g7hgfdr8324,你误引我了。我没有说“你不能与共享库或 DLL 对话”。我说反了。是的,如果您可以将 C++ API 公开为 DLL,那么您可以通过 ctypes 从 Python 调用它。你的界面必须是纯 C,而不是 C++。【参考方案3】:我建议你尝试 SWIG 或 sip (KDE/PyQt)。
SWIG 链接:http://www.swig.org/ SIP链接:http://freshmeat.net/projects/python-sip/
这些可用于包装 C++ 类并为它们提供 Pythonic 接口。
【讨论】:
以上是关于如何在 Python 中使用 C++ 类?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PyObjects 声明 Boost.Python C++ 类