Как заставить ABC работать с Boost.Python / C ++ Classes?

я хочу abc.abstractmethod работать в следующем классе:

from abc import ABC
from my_cpp_module import my_class

class A(my_class, ABC):
@abstractmethod
def implement_me(self, arg):
'''not implemented'''

class B(A):
pass

b = B()                    <--- should throw
b.implement_me('hallo')

Но этот маленький пример дает мне

Traceback (most recent call last):
File "./abc-test.py", line 4, in <module>
class A(my_class, ABC):
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases

Возиться немного с type, классы и так далее, я получаю реализацию, которая работает без ошибок:

class MyABC(type(my_class), ABCMeta):
pass  # type(my_class) == <class 'Boost.Python.class'>

class A(my_class, metaclass=MyABC):
@abstractmethod
def implement_me(self, arg):
'''not implemented'''

.. но в этом случае b = B() просто работает тоже, но (конечно) я хочу, чтобы он выдал следующую ошибку:

File "./abc-test.py", line 22, in <module>
b = B()
TypeError: Can't instantiate abstract class B with abstract methods implement_me

Есть ли способ сделать abstractmethod работать вместе с классами Boost.Python, как ожидалось?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]