我有一个Event
在 C++ 中定义的类,我使用 Boost 向 Python 公开该类。我的脚本应该从此类派生,并且每当定义新的子类时我都想进行一些初始化。
如何设置暴露的元类Event
类,以便每当 Python 脚本从此类派生时,元类都可以执行所需的初始化?
我想避免在脚本中显式使用元类......
class KeyboardEvent(Event): # This is what I want
pass
class KeyboardEvent(Event, metaclass=EventMeta): # This is not a good solution
pass
Edit: 部分解决方案
似乎没有办法用 Boost.Python 设置元类。下一个最好的事情是在定义类之后即兴创作并更改元类。在原生 Python 中,安全的方法 https://stackoverflow.com/a/5121381/627005更改元类的方法是:
B = MetaClass(B.__name__, B.__bases__, B.__dict__)
在 Boost 中,它看起来像这样:
BOOST_PYTHON_MODULE(event)
{
using namespace boost::python;
using boost::python::objects::add_to_namespace;
class_<EventMetaClass> eventmeta("__EventMetaClass")
...;
class_<Event> event("Event")
...;
add_to_namespace(scope(), "Event",
eventmeta(event["__name__"], event["__bases__"], event["__dict__"]));
}
问题是我似乎找不到用 Boost.Python 定义元类的方法,这就是我打开的原因如何使用 Boost.Python 定义 Python 元类? https://stackoverflow.com/q/9050985/627005.