簡體   English   中英

如何將PyObject_IsInstance與非內置類一起用作第二個參數?

[英]How can I use PyObject_IsInstance with a non-builtin class as second argument?

在C / C ++中,我想看看PyObject是否是一個實例。 不幸的是, PyInstance_Check宏不適用於新式類。

所以,根據我讀過的論壇帖子, 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<PyObject*>(&ProtocolType))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM