я хочу 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, как ожидалось?
Задача ещё не решена.
Других решений пока нет …