将C方法附加到现有的Python类

2024-09-28 20:54:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否可以在不使用SWIG或其他框架的情况下向Python类添加本机方法。你知道吗

我深入研究了pythoncapi,但没有找到合适的方法。你知道吗

我想我应该有一个init方法来加载现有模块并向其中添加一个方法:

PyMODINIT_FUNC
PyInit_lambert(void)
{
    PyObject* m;

    m = PyImport_ImportModule("lambert");

    /* Some code to attach method */

    return m;
}

有人能给我一些小费吗?你知道吗


Tags: 模块方法框架init情况pyinitswigpyobject
1条回答
网友
1楼 · 发布于 2024-09-28 20:54:24

如果简单是一个优点,那么很难打败^{}模块。它允许您用Python而不是C编写Python-C接口。以我的经验,这比编写Python扩展容易得多。我想会有一些开销,所以如果在内部循环中调用,您可能会看到性能问题。你知道吗

在过去,我只是重写了C中最内部的循环

然后,您就可以用普通的老Python生成子类。你知道吗

from some_module import SomeClass

import ctypes

my_c_func = do_the_ctypes_stuff() # see ctypes doc (linked above)

class WrappedClass(SomeClass):
    def added_method(self, *args, **kwargs):
        cargs = my_process_py_args(*args, **kwargs)
        cret = my_c_func(*cargs)
        my_apply_c_result(self, *cret)
        return my_make_py_result(self, *cret)

我的建议是编写纯Python和纯C,不要试图对接口太花哨。你知道吗

相关问题 更多 >