[笔记]Python对象基础

以前写在Evernote上的笔记。

Python对象机制最基础的是PyObject和PyVarObject,而后者又仅仅是比前者多了一个变量而已。

在object.h中有这两者的定义:

typedef struct _object {
     PyObject_HEAD
} PyObject;

typedef struct {
     PyObject_VAR_HEAD
} PyVarObject;

同一个文件下也定义了相应的两个宏。

可以看出Python中对象的核心在于引用计数ob_refcnt和类型对象ob_type,而可变对象则多了个可变的项的数目ob_size(比如一个list有5个元素)。

这里出现了个新的变量:_typeobject,用来表示对象的类型。

代码的第一行就表示类型对象也是一个可变对象,那么类型对象也应该有类型的,定义在typeobject.c中。

宏PyObject_HEAD_INIT定义在object.h中:

由上,可知对象类型也是一种对象,为PyTypeObject,而类型对象的类型为PyType_Type,最后递归在此。


Python中所有的对象都继承PyObject,内存布局中开头都是PyObject,所以可以通过PyObject *指针来指向所有对象,进行维护、操作。

至于调用类型特有的操作,则通过ob_type这个成员来判断。

这是Python中的继承和多态。


另外一点就是Python的引用计数,管理资源、进行垃圾回收。

Python通过ob_refcnt这个成员来标识该对象被引用了几次,为0时回收。

但是回收并不一定是还给操作系统,而是采用了内存对象池。

其中,类型对象是不被引用计数的。


JasonLee     2011.08.05     0:29

时间: 2024-10-24 09:47:53

[笔记]Python对象基础的相关文章

Javascript学习笔记之 对象篇(四) : for in 循环_基础知识

先上范例: // Poisoning Object.prototype Object.prototype.bar = 1; var foo = {moo: 2}; for(var i in foo) { console.log(i); // prints both bar and moo } 这里我们要注意两点,一是 for in 循环会忽略 enumerable 设置为 false 的属性.例如一个数组的 length 属性.第二是,由于 for in 会遍历整个原型链,所以当原型链过长时,会

《基于ArcGIS的Python编程秘笈(第2版)》——第1章 面向ArcGIS的Python语言基础

第1章 面向ArcGIS的Python语言基础 同其他编程语言一样,Python也支持多种类型的程序架构.本章主要介绍Python的基本语言架构.首先,介绍如何创建新的Python脚本及编辑已有的脚本:其次,介绍Python语言的特点,如添加注释.创建变量并赋值.创建内置变量等,以使Python的代码更加简单明了. 然后,介绍Python语言提供的各种内置数据类型,如字符串.数字.列表和字典等.类和对象是Python等面向对象编程语言的基本概念,在使用ArcGIS编写地理处理脚本时会经常用到它们

《基于ArcGIS的Python编程秘笈(第2版)》——1.3 Python语言基础

1.3 Python语言基础 了解Python语言的基本架构,有助于读者更有效地编写ArcGIS地理处理脚本.尽管Python语言相对于其他编程语言来说更易学,但要想真正掌握它,也需要花一定的时间来学习和练习.本节将介绍如何创建变量及给变量赋值,可赋值给变量的数据类型,如何使用不同类型的语句和对象,如何读写文件和导入Python第三方模块等内容. 1.3.1 代码注释 编写Python脚本时,一般都需要遵循约定俗成的程序架构.通常在每个脚本的开头是说明部分,用来说明脚本的名称.作者和处理过程的梗

Python爬虫基础

前言 Python非常适合用来开发网页爬虫,理由如下: 1.抓取网页本身的接口 相比与其他静态编程语言,如Java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl,shell,python的urllib包提供了较为完整的访问网页文档的API.(当然ruby也是很好的选择) 此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的.这是我们需要模拟user agent的行为构造合适的请求,譬如模拟用户登陆.模拟session/cookie

Python对象体系深入分析_python

本文较为详细的分析了了Python的对象体系.分享给大家供大家参考.具体如下: Guido用C语言创造了Python,在Python的世界中一切皆为对象. 一.C视角中的Python对象 让我们一起追溯到源头,Python由C语言实现,且向外提供了C的API http://docs.python.org/c-api/index.html . 我们思考问题的时候,可能对于对象这种东西很容易理解,而计算机能理解的只有0,1序列这样的字节序列,从根本上讲,我们所说的计算机语言中的对象只是在内存中的一块

Debian Linux下的Python学习——基础知识

python中的基本数据类型是数和字符串,下面是python的基础知识学习,包括数,字符串,变量,标识符,对象. 1. 数  在Python中数类型包括:整数.长整数.浮点数和复数. 2是一个整数. 长整数是大一些的整数. 3.23和52.3E-4是浮点数的例子.E标记表示10的幂.在这里,52.3E-4表示52.3 * 10-4. (-5+4j)和(2.3-4.6j)是复数的例子.      输入代码:                        运行结果:                 

张孝祥JavaScript教程笔记:HTML基础(二)

html基础|javascript|笔记|教程 相关文章:张孝祥JavaScript教程笔记:HTML基础(一)  不要试图用enter键来在浏览器中换行,而是用<br>;<nobr>防止系统自动换行:<block>缩近:<marquee behavior="slide"/"scroll"/"alternate" direction="up"/"down"/&quo

Python对象认知(1)

       Python 是一种面向对象的解释型计算机程序设计语言.那讲到类我们肯定要说一下对象,以及类和对象之间的关系. 类是用来规范和描述实体对象的.类包含(定义)一系列的属性和方法.那对象又是什么呢?对象就是由属性和方法组成,对象是类的实例化,对象是类的具体表现,所以对象含有类属性的具体值.那说到这里感觉还是一头雾水啊,那我们来举一个栗子吧. 在Python中,一切万物皆对象,比如眼前的这只狗---泰迪,在Python世界里他就是一个对象,他有一些特征,比如大小,颜色,爱啪啪等.其实这就

Python回顾与整理2:Python对象

0.说明                  说对象是面向对象编程语言最重要的一部分一点也不为过,没有了"对象",面向对象将无从谈起.Python也是如此,如果无法掌握对象,你很难有大的进步与提升. 1.Python对象 (1)对象特性         Python使用对象模型来存储数据,构造任何类型的值都是一个对象,所有的Python对象都拥有下面的三个特性: 身份:每个对象一唯一身份标识,可使用内建函数id()查看该值(可以认为这个值是该对象的内在地址) 类型:对象的类型决定了对象(