Hi, Does anyone know how to use __metaclass__ specification alongside inheritance from boost python classes? This code illustrates the problem: import abc
from scitbx.lstbx import normal_eqns
class Refinery(object):
__metaclass__ = abc.ABCMeta pass
class AdaptLstbx(Refinery, normal_eqns.non_linear_ls):
pass
The result is Traceback (most recent call last):
File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/abc.py", line 87, in __new__ cls = super(ABCMeta, mcls).__new__(mcls, name, bases, namespace) TypeError: Error when calling the metaclass bases metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
The real Refinery is a class that has one method that must be supplied by a concrete subclass. I like the idea of making it impossible to instantiate a base Refinery rather than relying on e.g. raise NotImplementedError() in that method definition. This is what ABCMeta would give me, if only I could get it to work here. Google found me some answers that require me to know the __metaclass__ of the bases (as suggested by the error message), but normal_eqns.non_linear_ls.__metaclass__ does not exist. I don't terribly mind the raise NotImplementedError() alternative, but I thought that if I can easily use ABCMeta, I'd like to. Cheers -- David