问题标签 [pyobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
31963 浏览

python - Python:获取 PyObject 的字符串表示?

我有一个 C python 扩展,我想打印一些诊断信息。

我收到一个字符串作为 PyObject*。

获取此对象的字符串表示形式以使其可用作 const char * 的规范方法是什么?

更新:澄清强调访问为 const char *。

0 投票
1 回答
1165 浏览

python - 腌制定义为具有 PyObject* 成员的 C 结构的 Python 扩展类型

我正在通过 Python 运行 C++ 代码,并且想腌制一个扩展类型。

所以我有一个 C++ 结构 (py_db_manager),其中包含指向数据库对象和对象管理器对象(均用 C++ 编写)的指针,我用 python 类型对象 (t_db_manager) 包装了它。我的问题是这种python类型需要知道如何腌制两个指针才能将它发送到一些子多核进程。所以我用 copy_reg 模块注册了类型(这相当于在类型上写了一个reduce () 方法。但是,我不太确定要放什么。我应该用 PyObject* 构建一个元组还是只是整数指针?有人可以帮忙吗?

这是 Py_TypeObject

这是reduce方法中的代码:

0 投票
1 回答
948 浏览

c++ - 当函数采用非平凡参数时,通过 SWIG 使用 python 进行 C++ 回调?

我刚刚阅读了“SWIG 和 Python”教程的以下部分: http ://www.swig.org/Doc1.1/HTML/Python.html#n11

我理解他们在示例中所做的事情,基本上你编写了一个调用 python 的 C 函数。但是,提供的示例在参数列表中只使用了一个 double,这使得为 python 构建参数列表变得相当简单。

我有一个具有以下签名的 C++ 回调:

其中 Vector 和 Simulation 是我自己的类,而 void* 用于持有 PyObject 的 clientData(如示例中所用)

我知道 SWIG 包装了 Vector 和 Simulation 类,因为我可以在 python shell 中创建它们。唯一的问题是,我不知道如何将回调函数中的 Vector 参数转换为 python 参数列表的适当 PyObject。SWIG 在包装类本身时显然有一些方法可以做到这一点,但我不知道如何在函数中手动完成它。

非常感谢任何帮助!-追赶

0 投票
1 回答
225 浏览

python - Python和Gtk+3入门问题

问候男孩和女孩!

我是 Gtk+ 编程新手,需要一个“体面的”开源 Twitter 客户端,但我找不到,所以我正在开发一个开源的客户端。我正在使用 Gtk+3 和 Python(PyGObject 不是 PyGtk),我的条目有 2 个问题: 1 - 无法将处理程序连接到这些信号:"deleted-text"以及连接"inserted-text"到作为条目的我的 tweet_text。我试过了self.tweet_text.connect("inserted-text", self.on_tweet)self.tweet_text.set_property("inserted-text", self.on_tweet)但它一直失败。2 - 不能让我的 tweet_text 多行。

我在这里搜索了文档http://readthedocs.org/docs/python-gtk-3-tutorial/en/latest/但我找不到与它相关的任何内容。并且a还搜索了与Gtk+3相关的C文档。

如果有人帮忙,我很感激。提前致谢。

0 投票
2 回答
875 浏览

python - 如何确定用于声明 PyObject 实例布局的 struct?

我正在用 C++ 编写 Python 3 扩展,并试图找到一种方法来检查 aPyObject是否与定义其实例布局的类型(结构)相关。我只对 static-size 感兴趣PyObject,而不是PyVarObject. 实例布局由具有某些明确定义的布局的结构定义:强制PyObject标头和(可选)用户定义的成员。

下面是PyObject基于定义新类型中著名的Noddy 示例的扩展示例:

重要的是要注意它Noddy是一个类型,一个编译时实体,但NoddyType它是一个在运行时存在于内存中的对象。Noddy和之间唯一明显的关系NoddyType似乎是sizeof(Noddy)存储在tp_basicsize成员中的值。

在 Python 中实现的手写继承指定了允许在PyObject用于声明该特定实例布局的类型之间进行转换的规则PyObject

在各种槽函数等情况下,可以安全地假设“Python 对象是 Noddy”并在没有任何检查的情况下进行强制转换。但是,有时需要在其他情况下强制转换,然后感觉就像是在盲目转换:

可以检查sizeof(Noddy) == Py_TYPE(obj)->tp_basicsize,但由于以下原因,它是不充分的解决方案:

1) 如果用户将来自Noddy

并且指向 , 的实例是obj不同的。但是,强制转换以获取指向实例布局部分的指针仍然是安全的。fooBabyNoddyPy_TYPE(obj)->tp_basicsizereinterpret_cast<Noddy*>(obj)

2)可以有其他结构声明实例布局的大小相同Noddy

事实上,在 C 语言级别,NeverSeenNoddystruct 与 object 类型兼容NoddyType——它可以适应NoddyType. 所以,演员阵容可能非常好。

所以,我的大问题是:

是否有任何 Python 策略可用于确定 aPyObject是否与Noddy实例布局兼容?

有什么方法可以检查是否PyObject*指向嵌入的对象部分Noddy

如果没有政策,是否有任何黑客可能?

编辑:有几个问题似乎相似,但在我看来,它们与我提出的问题不同。例如:访问 PyObject 的底层结构

EDIT2:为了理解为什么我将 Sven Marnach 的回复标记为答案,请参阅该答案下方的评论。

0 投票
2 回答
2893 浏览

python - 如何使用带有非内置类的 PyObject_IsInstance 作为第二个参数?

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

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

我想知道如何构造一个代表一个类型的类的 PyObject,所以我可以将它传递给PyObject_IsInstance. 你能帮助我吗?

0 投票
0 回答
164 浏览

python-3.x - 使用 Pydev 编译文件 PyObject (Gtk) 时出错

我在 Pydev 中使用 pyobject (gtk) 构建应用程序,但我尝试通过以下方式创建一个窗口:

班塔纳

类应用(主要):

但我尝试编译 te App,显示以下错误:

我正在尝试使用导入

但是,不起作用,因为找不到模块。所以我使用导入:

¿ 如何解决我的问题?

对不起,我的英语不好

谢谢。

0 投票
1 回答
303 浏览

python - 找出 PyObject 方法需要多少个参数

我们可以使用以下方法提取指向 python 方法的 PyObject

我想知道该方法需要多少个参数。所以如果函数是

我如何找出它需要 2 个参数?

0 投票
2 回答
6172 浏览

python - PyArg_ParseTuple 的正确用法是什么

我使用的似乎是 PyArg_ParseTuple 的确切用法,但代码仍然无法工作。我正在使用 python 2.7

这是我正在编写的 Python 扩展的 C 代码:

然后我只是构建扩展并转到终端 import et 然后 et.tpp([1,2]) 无法打印该行 if (PyArg_ParseTuple(item, "i", &arrayValue) != 0){ printf(" %d\n", 数组值); printf("万岁!\n"); }

正如您在代码中看到的那样,我检查了列表中元素的类型,并打印了“int”。然而由于某种原因 PyArg_ParseTuple 有错误。

我需要能够从 python 中的列表中访问信息以复制一些数据,将其传递给其他地方的 C 代码,然后将结果返回给 python。

非常感谢!

0 投票
2 回答
965 浏览

c++ - C++ 和 Python- 检查 PyObject 的类型失败

我有点困惑。我正在尝试进行一些 C++ 和 Python 集成,但这并不简单。我没有使用 Boost,因为我无法让 Boost::Python 正确编译。但那是另一回事了。

目前,这是我在 C++ 中所做的:

Python 程序(作为名为“data”的字符串输入到 C++ 程序):

现在,问题是类型检查不起作用。无论 Python 函数返回的是浮点数、列表还是集合,它们都返回 0。我究竟做错了什么?

如果有人能告诉我为什么对 PyRun_String 的调用会在控制台中打印返回值,则可以加分。这真的很烦人。