如何用博斯。Python?

2024-05-19 02:09:40 发布

您现在位置:Python中文网/ 问答频道 /正文

pythoncapi有^{}对象,它相当于解释器中的type。如果我想在C++中定义一个元类,我怎么可以设置^ {< CD2}}作为它的一个基础博斯。Python?另外,在C++中定义Python元类时,还需要考虑哪些其他的问题呢?在

如果有一个Boost.Python解决办法。如果不是,那么使用pythoncapi(或者Boost和capi的组合)的解决方案也很好。因为我的其他课程都是用Boost暴露的,所以我宁愿把SWIG作为最后的手段。在

注意:如果你感兴趣的话,这实际上是我要解决的一个更大问题的一部分。在


Tags: 对象定义手段type解决方案解释器基础感兴趣
1条回答
网友
1楼 · 发布于 2024-05-19 02:09:40

好吧,这感觉像一个黑客,但似乎有效。在

#include <boost/python.hpp>

class Meta
{
public:
    static boost::python::object
    newClass(boost::python::object cls, std::string name, boost::python::tuple bases, boost::python::dict attrs)
    {
        attrs["foo"] = "bar";
        boost::python::object types = boost::python::import("types");
        boost::python::object type = types.attr("TypeType");
        return type.attr("__new__")(type, name, bases, attrs);
    }
};

BOOST_PYTHON_MODULE(meta)
{
    boost::python::class_<Meta>("Meta")
    .def("__new__", &Meta::newClass)
    .staticmethod("__new__");
}

然后在python中

^{pr2}$

我尝试了其他一些没有使用boost::python::object系统的东西,但是在python端却没有得到这样的结果。在

虽然严格地说,这不是一个元类,因为它不是从类型继承的,但它的行为类似于元类,因为在调用new时,type直接在newClass函数中使用。如果这不是一个问题,那么改变它可能是明智的

return type.attr("__new__")(type, name, bases, attrs);

return type.attr("__new__")(cls.attr("__class__"), name, bases, attrs);

或者类似的东西,所以使用Boost::Python::class来代替type。在

相关问题 更多 >

    热门问题