c/c++语言开发共享如何将PyObject_IsInstance与非内置类一起用作第二个参数?

在C / C ++中,我想看看PyObject是否是一个实例。 不幸的是, PyInstance_Check宏不适用于新式类。

所以,根据我读过的论坛post, PyObject_IsInstance可以解决问题。 但是,我发现的所有示例都演示了与内置类型(如整数和字符串)的比较。

我想知道如何构造一个表示类型类的PyObject,所以我可以将它传递给PyObject_IsInstance的第二个参数。 你能帮助我吗?

    我终于根据该页面的内容找到了答案: 使用C API创建在python中声明的python类的实例

     // PyInstance_Check works only for old-style classes. qBool isInstance = PyInstance_Check(pyInstance); if (!isInstance) { // It might be an instance of a new-style class. // PyRef module = PyImport_ImportModule("module.where.myclass.is"); PyObject* moduleDict = PyModule_GetDict(module.Get()); PyObject* protocolClass = PyDict_GetItemString(moduleDict, "MyClass"); int returnValue = PyObject_IsInstance(pyObject, protocolClass); } 

    如果在同一模块中定义了相应的PyTypeObject则可以使用它。 如果从你想要使用PyObject_IsInstance地方看不到类型对象(假设它叫做ProtocolType ),首先用以下方法声明一个原型:

     extern PyTypeObject ProtocolType; 

    然后像这样使用它:

     PyObject_IsInstance(object, reinterpret_cast(&ProtocolType)) 

      以上就是c/c++开发分享如何将PyObject_IsInstance与非内置类一起用作第二个参数?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560232.html

      (1)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐