Given a C++ class wrapped with Boost.Python: class CPPClass { void test(); }
BOOST_PYTHON_MODULE(testmodule) { class_<CPPClass>("CPPClass") .def("test", &CPPClass::test) ; } I've created a python subclass and redefined the metaclass: class Meta(CPPClass.__class__): def __new__(cls, name, bases, attrs): return super(Meta, cls).__new__(cls, name, bases, attrs) class PyClass(CPPClass): __metaclass__ = Meta Any attempt to call methods of PyClass, or to pass it as an argument to a C++ function results in an ArgumentError. It appears that ob_type is being tested for equivalence to the Boost.Python.class type. I am currently working around this by using a plain function as the metaclass, but it's not ideal as each base class must set the metaclass explicitly. I browsed through object/class.cpp, and I think using PyType_IsSubtype() in place of == &class_metatype_object should be sufficient to allow me to derive metaclasses from Boost.Python.class. Does anyone have any advice, comments or objections before I proceed? James _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig