什么是Python中的PyObject?

eri*_*ric 22 c python python-extensions

精简版

我最近遇到了一些Python代码,其中函数的返回类型PyObject文档中指定.什么是PyObject

详细版本

我不是C/C++程序员,但是当我遇到PyObject上面链接的文档时,Google告诉我这PyObject是一个使用Python/C API定义的Python对象.具体来说,API文档定义PyObject如下:

所有对象类型都是此类型的扩展.这是一种类型,其中包含Python将对象指针视为对象所需的信息.在正常的"发布"版本中,它仅包含对象的引用计数和指向相应类型对象的指针.它对应于PyObject_HEAD宏扩展定义的字段.

坦率地说,我并不完全理解这一点,或者它是否回答了我的基本问题,但它并没有让我觉得将PyObject一个对象视为一个完整的Python对象显然是错误的.另一方面,也许从技术上来说,PyObject必须使用Python/C API将该类型创建为标准Python的扩展.例如,是一个整数a PyObject

可能相关的链接

http://docs.scipy.org/doc/numpy/reference/c-api.types-and-structures.html

ick*_*fay 15

你在Python中可以触及的每个值都是PyObject在C中.包括列表,字典,套接字,文件,整数,字符串,函数,类,你可以命名它.如果你可以用Python触摸它,它就是用PyObjectC.

  • @neuronet:是的,在Python文档中说一些"PyObject"可能是错误的,但是为什么它可能存在于那里有点可以理解,因为我相信PySide是部分自动生成的,并且代码生成器可能没有特殊的 - "pyObject"不应出现在Python文档中".而`PyObject`是可以在Python中触及的任何对象,*即使它是在Python*中定义的.它不必由扩展名定义.通过说它需要一个`PyObject`,它说它接受任何旧值. (2认同)

Ign*_*ams 7

PyObject事实上,A 只是C级的Python对象.因为Python中的整数是对象,所以它们也是PyObjects.它无论是用Python还是用C编写都无关紧要,PyObject无论如何都是C级.

  • @neuronet:该文档打破了 Python 及其实现之间的抽象。没有实际的负面影响,但如果您一开始不了解实现细节,那么阅读起来可能会令人困惑。 (2认同)