python - 如何将手写的 CPython 方法添加到我的 SWIG 包装类
问题描述
我有一个使用 SWIG -builtin 为 Python 包装的 C++ 类。我想为该类添加一个方法,该方法包含在纯 CPython 中,例如,我希望在我的 methoddef 列表中使用它:
{ "handRolledCall", (PyCFunction) _wrap_MyClass_handRolledCall, METH_NOARGS, (char *) "" },
我定义的地方_wrap_MyClass_handRolledCall()
。我可以使用 %extend 非常接近:
%extend MyClass {
PyObject* handRolledCall(PyObject* arg1, PyObject* arg2) {
// access the C++ value of self with $self
}
}
但这总是吃掉 Python PyObject 的self
. 这意味着无法操作输入对象的 Python 状态,例如,如果我想将其添加到集合中。
我也尝试过使用 %native,正如 Add hand-wrapped method to Swig output中所建议的那样。但那是关于自由函数的,并没有提供向现有类添加方法的方法。
因为我使用的是 SWIG -builtin,所以我不能在 Python 端进行monkeypatch。__enter__
我的用例是为一些应该充当上下文管理器的类生成 Python方法。
解决方案
推荐阅读
- google-chrome - 单击链接后如何保持 Chrome 扩展程序窗口打开?
- java - 在准备好的语句上设置参数时出现 JDBC 异常
- azure - 发布完成后 IIS 物理路径更改 Azure DevOps
- r - 如何摆脱将excel工作表中的大数转换为指数?工作室
- agda - 多次重写如何扩展到with?
- c++ - 为什么 glTextureStorage*D 函数会消耗这么多内存?opengl实际上做了什么?
- macos - 光标问题,输入 Cmd+C 后,光标从行变为块
- php - sql中是否有任何函数可以应用自定义字段值并在where子句中获取这些值
- c++ - 将二进制补码十六进制数转换为 boost::multiprecision::int256_t
- java - Bean -> Csv 与 OpenCsv 的自定义值映射