抽象数据类型
抽象数据类型(ADT)是计算机领域中被广泛接受的一种思想和方法,也是一种用于设计和实现程序模块的有效技术。抽象数据类型的基本思想是抽象,或者说是数据抽象(与函数定义实现的计算抽象或称过程抽象对应)。
数据类型和数据构造
类型(数据类型)是程序设计领域最重要的基本概念之一。在程序里描述的、通过计算机去处理的数据,通常都分属不同的类型,例如整数或浮点数。每个类型包含一集合法的数据对象,并规定了对这些对象的合法操作。各种编程语言都有类型的概念,每种语言都提供了一组内置数据类型,为每个内置类型提供了一批操作。
ADT是一种思想,也是一种组织程序的技术,主要包括:
1)围绕着一类数据定义程序模块
2)模块的接口和实现分离
3)在需要实现时,从所用的变成语言里选择一套合适的机制,采用合理的技术,实现这种ADT的功能,包括具体的数据表示和操作。
Python类
略过...
python类里面函数第一个形参self的解释:
如果在程序里通过某个类C的实例对象o,以属性引用的形式调用类C里定义的方法函数m,python解释器就会创建一个方法对象,把实例对象o和方法函数m约束在这个方法对象里。在执行这个方法对象时,o就会被作为函数m的第一个实参。在函数m的定义里通过形参self的属性访问,都实现为对调用对象o的属性访问。
o.m(...) === C.m(o,....)
检查两个类是否具有继承关系
issubclass(class1, class2)
方法查找
由于C类里没有f定义,c.f()实际调用的是B类里定义的f。由于在f的定义里出现了调用self.g,现在出现了一个问题:如何确定应该调用的函数g?由于C类里没有f的定义,按规则应该到C类的基类中去查找f。在C的基类B里找到了f的定义,因此应该执行它,而在B.f函数里面出现了self.g(),由于当时self的值是一个C类的实例对象,确定g的工作再次从调用对象所属的C类开始进行,由于C类里存在函数g的定义,它就是应该调用的方法。
标准函数super()
Python提供了一个内置函数super,把它用在派生类的方法定义里,就是要求从这个类的直接基类开始做属性检索(而不是从这个类本身开始查找)。采用super函数而不直接写具体基类的名字,产生的查找过程更加灵活。如果直接写基类的名字,无论在什么情况下执行,总是调用该基类的方法,而如果写super(),Python解释器将根据当前类的情况去找到相应的基类,自动确定究竟应该使用哪个基类的属性。
super().m() 从基类开始查找m
super(C, obj).m() 从指定的类C的基类开始查找,obj必须是C的一个实例,并且作为m的第一个参数self