Могу ли я переопределить виртуальную функцию C++ в Python с помощью Cython?

У меня есть класс C++ с виртуальным методом:

//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), но более важно позволить пользователям делать это в чистом python.

Изменить: Если это поможет, решением может быть использование приведенного здесь псевдокода: http://docs.cython.org/src/userguide/pyrex_differences.html#cpdef-functions

Но тогда есть две проблемы:

  • Я не знаю, как написать этот псевдокод на Cython
  • возможно, есть лучший подход

12
задан ascobol 12 April 2012 в 16:19
поделиться