首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python和动态扩展C++类

Python和动态扩展C++类
EN

Stack Overflow用户
提问于 2011-10-13 12:07:37
回答 1查看 651关注 0票数 1

因此,我在Python中遇到了自定义类型、函数和属性的问题。

当我使用Python时,我想在我的一个自定义类型(例如Vector4)上设置一个属性,我的代码将为const char* attribute_name参数获得一个NULL (是的,我正在导入我的模块)。

奇怪的是,当我在setter函数中硬编码属性名时,我得到了错误:

SystemError: error return without exception set

我确实看到对象是用Python创建的(也是用C++创建的),所以我认为这不是问题所在。如果setattro钩子成功地在C++中设置了属性,则返回1,并且看到调用代码并在C++侧设置属性。在设置属性时不会引发错误/异常。

此外,当我用Python调用类实例上的函数时,它会调用tp_getattro中的函数集,而不是检查字典。

我不完全确定为什么,可能是因为我正在设置一个字典,并将我的函数放在其中,而不是通过PyModuleDef数组执行,因此在调用PyType_Ready时没有看到函数。

有人知道为什么会发生这种事吗?我们正在使用Python3.2。

相关:

我有一个基类型(tp_newtp_dealloc),然后在运行时创建派生类型。派生类型有字典、tp_basetp_getattrotp_setattro

函数是如何绑定到Python类/类型的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PyMethodDef newMethod;
newMethod.ml_doc = newMethod.ml_name = funcName;
newMethod.ml_flags = METH_VARARGS;
newMethod.ml_meth = pythonFunc;

PyGeneralObj* selfFake = PyObject_New(PyGeneralObj, &MetaEngineType);
selfFake->className = className;
selfFake->funcName = funcName;
Py_INCREF((PyObject*)selfFake);

PyObject *func = PyCFunction_New(&newMethod, (PyObject*)selfFake);
PyObject *method = PyInstanceMethod_New(func);

ErrorIf((method == NULL), "Python: Cannot create instance function. %s", 
funcName);

ErrorIf((PyDict_SetItem(classObj->m_pyClassType->tp_dict,            
PyReturnStr(newMethod.ml_name), method) == -1), 
"Python: Cannot create function in dictionary.");

Py_DECREF(func);
Py_DECREF(method);

其中funcName和className为const *。pythonFunc是一个通用的python函数,它处理对绑定到元系统的所有函数的调用。classObj是指向具有成员m_pyClassType (PyTypeObject类型)的PythonClass的指针。

PyGeneralObj是一个新对象,有两个const *和一个void* (这是C++中的对象)

我做PyType_Ready,没有错误,然后增加我的类型。然后,我将对象添加到模块PyObject中,这是从PyImport_ImportModule提供的。我确实将我的主模块附加到运行时,并将python初始化并导入我的模块。

如果需要更多的信息/代码,我可以张贴更多。我希望这是有意义的,这是我第一次在堆栈溢出上发帖。

为了澄清这一点,我们想要在C++端完全解析动态属性。对于函数,我希望能够覆盖PyObject* self参数,以便获得需要调用的函数的字符串名称。

我们不想使用第三方库/接口,比如Boost、Cython等等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-18 16:31:35

问题是在我实现getattro时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7759827

复制
相关文章
构建增强现实移动应用程序的六款顶级工具
增强现实已经成为数字世界的新趋势,在Pokemon Go把它带入普通移动用户的生活引发热潮后,您就很难再碰到一个对此不熟悉的人了。尽管很多人认为AR只是一种用于娱乐的技术,但是,事实上,它在多个行业(如医疗保健、电子商务、建筑等等)有着广泛的应用。本文准备打破这种刻板的印象。
全栈程序员站长
2022/06/29
5.7K0
构建增强现实移动应用程序的六款顶级工具
鸿蒙不是Linux也不是安卓
先举个例子,大家很熟悉的Windows里面含有内核,也含有UI系统,含有桌面程序,普通人可以直接使用Windows。但是Linux仅仅是一个内核(它提供进程管理、文件系统等概念),必须在Linux之上安装各种APP,普通人才可以使用。基于Linux内核制作出来的完整系统有Ubuntu、debian等等,普通人可以直接使用这些完整系统。
韦东山
2020/09/30
4.8K0
鸿蒙不是Linux也不是安卓
视频图像智能识别系统
视频图像智能识别系统根据优化算法对项目现场封闭地区开展监控和防卸,对项目现场实时全天候监控识别分析,当监测到有人的身体进入时,视频图像智能识别系统会全自动警报和警示,适用三种颜色智能展现不一样情况,数据可视化监管 。在项目施工作业区域开展侵入监管,如安全防护网、防护栏、低路基工程段、路基斜坡、施工进出口识别、隧道、公路桥梁段、公交车铁路线等道路,在监测到出现异常工作人员闯入时开展时实警报,保证项目施工作业现场的安全性。
燧机科技
2022/09/14
8410
视频图像智能识别系统
安卓系统usb调试在哪_安卓手机的usb调试
Android手机USB调试在哪?安卓手机如何打开USB调试模式?如果我们要将安卓手机连接到电脑上,从而传输文件、下载应用或ROOT等,都需要打开手机的USB调试模式。安卓系统的版本有很多,它们的打开方法也各不相同,下面给大家介绍各版本安卓手机打开USB调试模式的方法。
全栈程序员站长
2022/09/30
3.8K0
Android--SVG在安卓系统中的应用
通过使用它的Path标签,几乎可以实现SVG中的其它所有标签,虽然可能会复杂一点,但这些东西都是可以通过工具来完成的,所以,不用担心写起来会很复杂。
aruba
2020/07/03
2.8K0
安卓系统能读ntfs文件吗(Android Pie)
Kernel Config配置 CONFIG_NTFS_FS CONFIG_NTFS_RW(只能针对已存在文件进行写操作) CONFIG_NLS CONFIG_NLS_UTF8(用于支持中文格式)
全栈程序员站长
2022/07/29
1.2K0
安卓中的数据存取
在我们每天使用的手机设备中,无时无刻都在进行着数据的存和取。安卓作为一种手机操作系统,提供了如下方式的数据存取方式:Preference,File,Sqlite和网络,可以根据程序的实际需求选择合适的存取方式。
牛老师讲GIS
2018/10/23
1.3K0
安卓中的数据存取
安卓到底是不是Linux
Linux 与 Linux 内核其实是不一样的,关于这个问题,我在之前的一篇文章中讲过(《Linux,Unix,GNU 到底有什么样的渊源?》)。Linux 的内核是由 Linus Torvalds 在1991年首次编写。它是操作系统的核心,包括设备驱动、文件系统、进程管理、网络通信等。但是操作系统光有内核,用户是没有办法操作的,所以很多厂商和 Linux 社区就在内核之上开发了很多工具,比如我们常用的 GNome桌面,FireFox浏览器、GIMP 图片编辑器等等。Linux 内核和这些应用一起打包后就被称作 Linux 发行版本。Linux 有很多的发行版本,我在之前的文章中(《这么多Linux版本,你究竟该怎么选择?》),对不同的版本做过比较。
Coding十日谈
2020/08/13
6.5K0
安卓到底是不是Linux
安卓系统框架介绍(安卓常用框架)
——源码地址1: https://android.googlesource.com/
全栈程序员站长
2022/07/30
8.7K0
安卓系统框架介绍(安卓常用框架)
鸿蒙系统与安卓系统的区别
华为鸿蒙已经发布快一年了,但是经常还有小伙伴说,鸿蒙不就是安卓系统套个壳么?类似小米的米UI和华为自有的EMUI。 我们不可否认鸿蒙2.0系统跟安卓的界面确实很相似,但就因此判定鸿蒙系统是安卓换皮了吗? 都知道鸿蒙系统跟安卓一样,采用的是AOSP 开源代码,而安卓自身超过80%的代码都来自于开源项目,谁也不能说谁在换皮吧? 长期以来,谷歌Android和苹果iOS系统占据了全球移动端操作系统的绝大多数市场份额,除了苹果的IOS以外,其他手机基本使用的就是安卓系统,当然,鸿蒙推出以后就三分天下啦。 对于很多
老九君
2022/04/29
5.5K0
鸿蒙系统与安卓系统的区别
逐渐安卓化会是ios的归宿吗
近日的苹果发布会虽然没等到iphone12,但ios14还是如期而至了。似乎是预示着这个版本的重大变革,ios14对新系统的定义就是“重塑iphone体验”。
TestOps
2022/04/07
1.4K0
逐渐安卓化会是ios的归宿吗
学习迁移架构用于Scalable图像的识别
论文出自Google Brain,是对前一篇论文的改进,前一篇文章讲述了用RNN去搜索一个最好的网络结构,而这篇文章认为之前的搜索空间太大,效果不好,所以改成搜索CNN的效果最好的conv cell。再用这些conv cell来构建一个更好的网络。 链接:https://arxiv.org/abs/1707.07012 ---- 1、Introduction 在ImageNet上学习到的分类网络,其特征迁移到其他任务时,往往能获得更好的效果。但是如果将前一篇文章提出的NAS直接在ImageNet上训练
计算机视觉研究院
2018/04/17
7610
学习迁移架构用于Scalable图像的识别
关于直播系统和短视频系统安卓手机屏幕适配的方向思路
直播与短视频的接踵而至,将互联网推向了网红经济时代,而智能手机的更新迭代为二者的发展提供了“温床”。但随着Android机型的增多,设备碎片化的程度也在不断加深,因此为了保证用户在不同Android机型下的体验效果一致,我们需要对各种手机屏幕进行适配。
q3557873521
2018/09/18
1.5K0
浅谈安卓中的MVP模式
端午放假,天气下雨,于是乎在家撸一下博客,本篇博客将为大家解析MVP模式在安卓中的应用。
老马的编程之旅
2022/06/22
9800
浅谈安卓中的MVP模式
[答疑]系统首先维护的是本质而不是现象
可以看这个。轮子的大小只依赖于轮子的属性,轮子的前后还要依赖车的结构约束。想想哪个更本质。
用户6288414
2022/10/31
3110
[答疑]系统首先维护的是本质而不是现象
RxBinding详解: 规范而强大的安卓UI响应式编程
原文:Reactive Android UI Programming with RxBinding 作者:Donn Felker 翻译:DreamWinter
冰之角
2018/09/04
2.9K0
浅谈安卓系统上的DSU loader
什么是DSU loader? dsu loader即 动态系统更新可以在使用动态分区的安卓设备上,不影响原来系统的同时安装一个副系统,用于体验最新的原生安卓系统(AOSP)(博主评:相比传统刷机模式,
Tianli
2023/03/03
12.9K0
WebRTC 如何在安卓系统上采集视频数据
WebRTC 作为一个开源的实时音视频通讯方案,经过多年的发展基本上已经支持了所有的常用终端,比如 windows、mac、Android、iOS等。我们都知道音视频通讯的前提是采集本地的音频和视频数据信息。今天,我们就来先了解一下 WebRTC 在安卓端是如何采集视频信号的。
liuzhen007
2022/02/23
2.6K0
WebRTC 如何在安卓系统上采集视频数据
安卓的日历_公认不卡的安卓手机
代码已上传到github:https://github.com/yannecer/NCalendar 项目主要用到了自定义View,ViewPager,RecyclerView和NestedScrollingParent。
全栈程序员站长
2022/08/03
4.9K0
安卓的日历_公认不卡的安卓手机
点击加载更多

相似问题

安卓系统上ARToolkit多标记的实现

14

用于安卓系统的ARToolkit演示不起作用

11

EasyAR本地安卓显示图像而不是视频

13

ArToolkit、安卓和2D标记

30

安卓系统中的图像识别ApI

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文