第二章 ADT和Python类

 第二章 抽象数据类型和Python类

 一、抽象数据类型

 数据类型数据构造

这里是说,基本的数据类型,如:int,bool,float,str等,处理较为复杂问题时不能满足需要。在这种情况下,python为数据的组合,提供了:list,tuple,set,dict等结构。
抽象数据类型的思想和支持这种思想的编程语言机制能帮助解决这些问题。

 抽象数据类型的概念

抽象数据类型的操作分三类:构造操作,解析操作,变动操作。
ADT是一种思想,也是一种组织程序的技术,主要包括:
1)围绕这一类数据定义程序模块;
2)模块的接口和实现分离;
3)在需要实现时,采用合理的技术,实现这种ADT的功能,包括具体的数据表示和操作。

 二、Python类

利用class定义,类定义实现抽象数据类型。

 类定义进阶

编程约定:
命名:下划线_ 开头的属性名和函数名都当作内部使用的名字。
类方法:两个下划线开头的名字(但不以两个下划线结尾),类定义之外不能直接用名字访问。
静态方法:python把在类里定义的非实例方法称为静态方法,描述时需要在函数定义的头部行之前加修饰符@staticmethod 静态方法中无self参数。本质上说,静态方法就是在类里面定义的普通函数,但也是该类的局部函数

 ADT描述形式

python的数据结构与算法:描述ADT的形式将模仿类定义的方式。

 三、类的定义和使用

1)执行类定义,创建类对象之后,还可以通过属性赋值增加新属性,函数属性也如此;但必须注意命名勿重
2)类方法函数也可以访问全局变量和函数,必要时写global或nonlocal声明
3)python的isinstance(obj,cls)函数,检查对象和类的关系
4)静态方法: @staticmethod def fun():实际上就是普通函数,由于某种原因需要定义在类里面。静态方法的参数,不需要self,类似java。
5)类方法:@classmethod def fun(): 这种方法必须有一个表示其调用类的参数。通过类方法实现与本类的所有对象有关的操作。
6)类作用域里的局部名字与函数作用域里的局部名字有不同的规定:
对于函数定义,局部名字的作用域将自动延伸到内部嵌套的作用域。因此,f中定义g,g可以使用f的变量或局部函数;
对于类定义,类C里定义的名字,不延伸到内部。因此,如果需要在类中的函数定义里引用这个类的属性,一定要采用基于类名的属性引用方式。
7)私有变量:数据属性或者函数属性都如同:_name 类定义之外不能使用。
前后两个下划线,仅前两个下划线,类之外无法找到。

 继承

继承作用:复用,简化新功能的开发等;建立一组类之间的继承关系,更好的组织和构造复杂的程序。
多继承  class <类名>(BaseClass,bigClass,….):
利用issubclass(cls1,cls2):查看继承关系
在调用积累的初始化方法时,必须写出基类名字,不能用self调用
基类函数,子类函数:近于实例对象的方法优先,动态约束,虚函数。
super();python会从这个对象所属基类开始查找属性。

 四、Python异常

 异常类和自定义异常

无论解释器发现的异常,还是通过raise语句引发的异常,控制流立刻终止,解释器进入异常处理模式。
异常处理语句:try语句带有任意多个except子句(异常处理器),字句头部用一个表达式描述捕获的异常。
Pass:只是希望定义特殊异常,并不需要这种异常有什么特殊功能,只写一个pass语句。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值