栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python C-API对象分配

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python C-API对象分配

这些文档位于http://docs.python.org/3.0/c-api/typeobj.html和
http://docs.python.org/3.0/extending/newtypes.html描述了如何创建自己的类型。

tp_alloc为实例执行低级内存分配。这等效于malloc(),并将refcnt初始化为1。Python有其自己的分配器PyType_GenericAlloc,但是一种类型可以实现专用的分配器。

tp_new与Python的__new__相同。与指向数据的指针相比,它通常用于将数据存储在实例本身中的不可变对象。例如,字符串和元组将数据存储在实例中,而不是使用char
或PyTuple

对于这种情况,tp_new根据输入参数计算出需要多少内存,并调用tp_alloc获取内存,然后初始化基本字段。tp_new不需要调用tp_alloc。例如,它可以返回缓存的对象。

tp_init与Python的__init__相同。您的大多数初始化都应在此函数中。

__new__和__init__之间的区别称为两阶段初始化或两阶段初始化。

您说“ _c 只是有新的_ ”,但这是不正确的。tp_alloc对应于C
中的自定义竞技场分配器,__new__对应于自定义类型分配器(工厂函数),而__init__更类似于构造函数。最后一个链接详细讨论了C
++和Python风格之间的相似之处。

另请参阅http://www.python.org/download/releases/2.2/descrintro/了解有关__new__和__init__如何交互的详细信息。

您写道,您想“直接在c 中创建对象”。这相当困难,因为至少您必须将对象实例化期间发生的所有Python异常转换为C 异常。您可以尝试查看Boost
:: Python以获得有关此任务的一些帮助。或者,您可以使用两阶段初始化。;)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/646937.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号