Converting from c++ to python - How to declare a virtual method with no definition in python
我正在尝试把C++库转换成Python。
C++文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class A { public: virtual void example(paramtype, paramtype) = 0; void myMethod(void); } void A::myMethod(void){ example(); } class B: public A { public: void example(paramtype p1, paramtype p2); // implemented } |
我很难实现MyMethod。我想制作一个变量来保存示例方法并调用mymethod中的变量,如下所示。
python文件
1 2 3 4 5 6 | class A: def __init__(self): self.example = None def myMethod(self): self.example() |
号
但是编辑说没有一种类型不能被调用(当然)。我怎样才能做到这一点?
若要将C++代码转换为Python 3,则应该从Python的抽象基类(ABC)派生。这样可以创建抽象方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 | from abc import ABC, abstractmethod class A(ABC): def __init__(self): pass @abstractmethod def example(self, a, b): raise NotImplementedError def my_method(self): self.example(1, 2) |
。
其他信息可以在这里找到:https://docs.python.org/3/library/abc.html
C++中的基类是声明一个没有定义的虚拟方法。
1 | virtual void example(paramtype, paramtype) = 0; |
这意味着它必须在要使用的子类中定义。在您的库中,这是
在python中,可以使用
1 | raise NotImplementedError() |
号
以指示尚未实现方法。有关详细信息,请参阅此答案。
1 2 3 4 5 6 7 8 9 10 11 | class A: def example(self): raise NotImplementedError() def myMethod(self): self.example() class B(A): # override the example method by providing the implementation def example(self): # implementation |
在本例中,对