美文网首页
Python 基础对象结构

Python 基础对象结构

作者: 阿布吃de饭 | 来源:发表于2017-06-08 14:48 被阅读27次

所有类的基础

定长对象

PyObject

#define PyObject_HEAD                   \
    _PyObject_HEAD_EXTRA                \
    Py_ssize_t ob_refcnt;               \
    struct _typeobject *ob_type;

// 定长对象
typedef struct _object {
    PyObject_HEAD
} PyObject;

变长对象

PyVarObject

#define PyObject_VAR_HEAD               \
    PyObject_HEAD                       \
    Py_ssize_t ob_size; /* Number of items in variable part *///即 容器中元素的个数


//变长对象(例如list等,多为容器)
typedef struct {
    PyObject_VAR_HEAD
} PyVarObject;

效果

通过这样定义,所有的对象都具备这样的元素,
那么,在对象的内存布局的头部便都具有了相同的信息头
那么,我们便可以使用一个PyObject* 指针来引用所有的对象

内存结构

类型对象

当然生成一个对象需要知道类的长度等信息
这就需要用到一个类的对象PyTypeObject

对象的创建

一般,python提供了两种方式来创建对象

  1. 通过Python C API来创建
  2. 通过类型对象创建(例如创建int对象使用的PyInt_Type)

Python C API 可以分为两类

  1. 泛型的API (AOL Abstract Object Layer)
    这类API可以应用到所有Python对象上,一般以PyObject_***的形式存在
  2. 类型相关的API (COL Concrete Object Layer)
    这类API只能作用于特定的类型,例如PyInt_FromeLong()

参考

《Python 源码剖析》

相关文章

  • Python 基础对象结构

    所有类的基础 定长对象 PyObject 变长对象 PyVarObject 效果 通过这样定义,所有的对象都具备这...

  • python面向对象学习笔记-01

    学习笔记 # 0,OOP-Python面向对象 - Python的面向对象 - 面向对象编程 - 基础 -...

  • <Python Tips> 2. 数据类型

    开启Python Python对象结构 Visualize your code and get live help...

  • pickle- Python对象序列化

    pickle模块实现Python对象结构的二进制协议序列化和反序列化。pickling将Python对象层次结构转...

  • Python GUI与面向对象

    Python GUI与面向对象 Python面向对象 对象是数据与其能实施的操作的封装结构 类是对于实例对象的抽象...

  • Python OOP-1

    0. OOP-Python面向对象 Python面向对象 面向对象编程基础公有私有继承组合,Mixin 魔法函数魔...

  • 2. 报告结构规定

    知识基础 Python类的基础了解 学习目标 使用Python类构造文章结构 1. 文章建立 首先,我们先建立基础...

  • 【CSDN博客迁移】Python笔记(2)——数据类型和数据结构

    本篇了解一下Python的基础数据类型和数据结构。 一 基础数据类型 二 数据结构 下面主要介绍Python中简单...

  • 03_对象(object)

    时间:2018-11-01 作者:魏文应 一、对象结构 对象的结构有: 在 python 中,一切皆对象。 id ...

  • Python 入门笔记

    1.Linux基础 2.Python基础 3.Python面向对象 4.项目实战 励志公式 1.01365=...

网友评论

      本文标题:Python 基础对象结构

      本文链接:https://www.haomeiwen.com/subject/zqxtqxtx.html