У меня есть класс С++ с виртуальным методом:
//C++
class A
{
public:
A() {};
virtual int override_me(int a) {return 2*a;};
int calculate(int a) { return this->override_me(a) ;}
};
Что бы я хотел сделать, так это разоблачить этот класс на Python с помощью Cython, наследовать от этого класса в Python и иметь правильный переопределенный вызов:
#python:
class B(PyA):
def override_me(self, a):
return 5*a
b = B()
b.calculate(1) # should return 5 instead of 2
Есть ли способ сделать это? Теперь я думаю, что было бы здорово, если бы мы могли переопределить виртуальный метод и в Cython (в файле pyx), но более важно, чтобы пользователи могли делать это в чистом питоне.
Изменить. Если это поможет, решением может быть использование приведенного здесь псевдокода: http://docs.cython.org/src/userguide/pyrex_differences.html#cpdef-functions
Но есть две проблемы:
- Я не знаю, как записать этот псевдокод в Cython
- возможно, есть лучший подход