Python学习笔记
面向对象
面向过程
核心就是”过程“二字
过程的核心思想就是将程序流程化
过程是“流水线”,用来分步骤解决问题的
面向对象
核心是“对象”二字
对象是“容器”,用来盛放数据与功能的
对象的核心思想就是将程序“整合”
类也是“容器”,该容器用来存放同类对象共有的数据与功能
类中存放的是对象共有的数据与功能
类可以访问
1.类的数据属性是共享给所有对象用的,大家访问的地址都一样
2.类的函数属性是绑定给对象用的 类调用自己的函数属性必须严格按照函数的用法来
绑定方法的特殊之处在于:谁来调用绑定方法就会将谁当做第一传入个参数自动
属性访问的语法
1.访问数据属性
类名.__dict__['变量名']
2.访问函数属性
类名.函数名
__init__方法
1.会在调用类时自动触发执行,用来为对象初始化自己独有的数据
2.__init__内应该存放的是为对象初始化属性的功能,但是是可以存放任意其他代码 想要在类调用时就立即执行的代码都可以放到该方法内
3.__init__方法必须返回None
封装:
1.将封装的属性进行隐藏操作
如何隐藏:在属性名前家__前缀,就会实现一个对外隐藏性效果
1、在类外部无法直接访问双下划线开头的属性,但知道了类 名和属性名就可以拼出名字:_类名__属性名
所以说这种操作并没有什么严格意义上地限制外部访问,仅仅只是一种语法意义上的变形。
2、这种隐藏对外不对内,因为__开头的属性会在检查类体内代码语法时统一发生变形
3、这种变形操作只在检测类体语法的时候发生一次,之后定义的__开头的属性都不会变化
为何要隐藏:
隐藏数据属性:不让外界直接引用,可以附加一系列条件的接口
隐藏函数/方法属性:不让类外引用,只能在类内用
继承:
继承是一种创建新类的方式,新建的类可称为子类或派生类,父类又可称为基类或超类,子类会遗传父类的属性
Python支持多继承
在Python中,新建的类可以继承一个或多个父类
优点:子类可以同时遗传多个父类的属性,最大限度地重用代码
缺点:1.违背了人的思维习惯
2.代码的可读性会变差
3.不建议使用多继承,有可能会引发菱形问题,扩展性变差
如果真的涉及到一个子类不可避免地要重用多个父类的属性,应该使用Mixins
继承表达的是一种什么“是”什么的关系
为何要用继承:
用来解决类与类之间代码冗余问题
在子类派生的2新方法中如何重用父类的功能
方式一:指名道姓调用某一个类下的函数=》不依赖继承关系
方式二:super()调用父类提供给自己的方法=》严格依赖继承关系
调用super()会得到一个特殊的对象该对象会参照当前的mro,去当前类的父类中找属性
Python2中:
新式类:继承了object类的子类,以及该子类的子类
经典类:没有继承object类的子类,以及该子类的子类
Python3中:
没有继承任何类,那么会默认继承object类,所以Python3中所有的类都是object类
反射机制:
指的是在程序运行过程中可以"动态"获取对象的信息实现反射机制的步骤
1.通过多dir:查看出某一个对象下可以.出来哪些属性来
2.可以通过字符串反射到真正得到属性上,得到属性值
四个内置函数的使用:
hasattr()判断属性是否存在
hasattr()获取属性
setattr()赋值属性
delattr()解除属性绑定
元类:
元类就是用来实例化产生类的类
关系:元类----实例化----类----对象
type是内置的元类
查看内置的元类:
我们用class关键字定义的所有的类以及内置的类都是由内置的元类type实例化的
class关键字:
类有三大特征:
1.类名
2.类的基类
3.执行类体代码拿到类的名称空间
属性查找的原则:对象->类—>父类
异常处理:
异常是程序发生错误的信号,程序一旦出错就会抛出异常,程序的运行随机终止
异常处理的三个特征:
异常的追踪信息
异常的类型
异常的内容
如何处理异常:
语法上的错误:SyntaxError
处理方式:必须在程序运行前就改正
逻辑上的错误:NameError,IndexError
针对逻辑上的异常又分成两种处理方式:
错误发生的条件是可以预知的
错误发生的条件是无法预知的
try:
子代码块 有可能会抛出异常的代码
except 异常类型1 as e:
pass
except 异常类型2 as e:
pass
except Exception as e: 万能异常
pass
else:
如果被检测的子代码块没有发生,则会执行else的子代码
else不能与try单独使用
finally:不处理异常,无论是否发生异常都会执行finally的子代码无论被检查的子代码块有无异常发生,都会执行finally的子代码 应该把被检测代码中回收系统资源的代码放到这

浙公网安备 33010602011771号