Python 核心编程读书笔记 Day5

Posted on 三 16 七月 2014 in readings • 1 min read

今天的内容是 Python 中的面向对象和 Python 的执行环境。Python 支持 OOP,虽然很多情况下 Python 直接写函数就可 可以解决大部分的问题,但是 OOP 也是 Python 中的一个重要内容。下面继续总结笔记。

第十三章:面向对象编程

本章的内容是 Python 的面向对象编程,具体来说,讲述了 Python 中关于类和 OOP 的具体内容,包括继承,类的方法等 内容,同时也涉及了 Python 中的特殊方法等类的内容。下面是要点:

1.Python 中的实例方法都存在着第一个参数为 self 指示这个实例本身;

2.Python 中的类方法存在着第一个参数为 cls 通常指示这个类本身;

3.Python 中的 __new__(cls,...) 方法才是构建实例的方法,__init__(self,...) 方法是初始化实例的方法;

4.Python 中的子类的构造方法会覆盖父类的构造方法,子类不存在构造方法才会调用父类的构造方法;

5.Python 不支持纯虚函数或者抽象方法;

6.类属性绑定到类的 __dict__ 中,实例属性绑定到实例的 __dict__ 中;

7.如果实例中不存在一个和类属性同名的实例属性,则通过实例访问到的是类的属性,如果进行修改,则会在实例中保存 一个同名的实例属性存放在实例的 __dict__ 中,这个实例属性会屏蔽同名的类属性,注意是屏蔽不是覆盖;

8.__del__ 是实例的析构方法,只有在真正需要对该实例进行释放内存的时候才会调用,在 Python 中也就是意味着该 实例的引用计数为 0,进行垃圾回收操作;

9.类方法和实例方法也是普通的函数,和普通函数不同的是,类方法绑定了类,实例方法绑定了该实例,可以通过类调用 实例方法,但是此时实例方法没有被绑定,需要显式地传入一个实例作为第一个参数;

10.静态方法是在类范围内的普通函数,不是绑定的方法,静态方法也可以通过类继承的方式由子类继承;

11.类的父类保存在 __bases__ 类属性中;

12.可以通过 super(Cls, instance).method() 的方式调用父类中的方法;

13.Old-style 类的 MRO 顺序是深度优先地搜索,直到找到,New-style 类的 MRO 顺序是广度优先搜索;

14.可以通过 hasattrgetattrsetattrdelattr 等内置函数对类和实例的属性进行操作;

15.Python 中的属性都是公开的,但是以下划线开始的属性会被混淆修改成为另外一个名称,显示出私有的属性;

16.字典会占用大量的内存,New-style 类可以通过 __slots__ 属性存放实例属性,节省内存;

17.New-style 的类支持 __getattribute__ 方法,实现了这个方法的类在属性被查找的时候都会调用这个方法;

18.描述符是一种将实现了 __get____set____delete__ 特殊方法的类的实例作为另外一个类的类属性的对象 ;