面向对象
1面向对象的基本格式:
1.1定义类
class 类名:
def 方法名(self,name):
def __init__(self,):构造方法:进行数据的初始化
通过构造方法,可以将数据进行打包,以后使用时,去其中获取即可
1.2调用类中的方法
1先创建该类的对象
2通过对象调用方法
1.3应用场景:
遇到很多函数,需要给函数进行归类和划分
对象的作用
存储一些值,方便以后使用
初始化方法(构造方法),给对象内部初始化
将数据封装到对象,方便使用
方式一:归类+提取公共值
方式二:在指定类中编写和当前类相关的所有代码+提取公共值
2面向对象的三大特性:封装/继承/多态
2.1封装
将相关功能封装到一个类中:
将数据封装到一个对象中:
2.2继承
1继承编写
执行对象.方法时,优先在自己的类中找,如何没有就去父类中找
多个类中有如果有公共的方法,可以放在基类中避免重复
继承关系中的方法查找顺序
注意事项:self到底是谁
self参数是python帮助我们自动传递
如何执行面向对象中的方法时,前面必须有一个对象
self是哪个类创建的,就从此类开始找,自己没有找父类
2.3多继承
多态(多种形态/多种类型)鸭子模型
对于一个函数而言,python对于参数的类型没有限制,那么传入参数可以是各种类型
封装思想:将同一类的函数封装到同一个py文件中,方便以后使用
面向对象也有封装的作用:将同一类的函数封装到一个类中
三个词:类/对象/方法
什么时候用面向对象
函数(业务功能)比较多,可以使用面向对象进行归类
要做数据封装(创建字典存储数据时,面向对象)
3类的成员,成员分三类
3.1变量,实例变量(字段),类变量(静态字段)
准则:
实例变量(字段)访问时,使用对象访问
类变量(静态字段)访问时,使用类方法
3.2方法,实例方法,静态方法,类方法
静态方法
编写时,方法上方@staticmethod
方法参数可有可无
类方法
方法上方@classmethod
方法的参数有一个cls的参数
3.3属性
编写时,方法上方@property
主动调用其他类的成员
方式一
super按照类的继承顺序,找下一个
特殊成员:
真正的构造方法
__new__ 构造方法创建对象
__init__ 初始化方法
__call__
__getitem__
__setitem__
__delitem__
__enter__
__exit__
__add__
__dict__
4修饰符
issubclass
isinstance 检查对象是否类创建的
type 获取当前对象是由哪个类创建的
callable
5方法和函数
6反射
getattr根据字符串的形式,去对象中找成员
hasattr根据字符串的形式,去判断对象中是否成员
setattr根据字符串的形式,动态设置一个成员
delattr根据字符串的形式,动态删除一个成员
7什么是接口以及作用
7.1.接口是一种数据类型,主要用于约束派生类中必须实现指定的方法
python中不存在,Java和c#中式存在的
7.2python中使用什么来约束的呢?
抽象类+抽象方法,编写上麻烦
人为主动抛出异常
7.3约束时,抛出的异常是否可以用其他的?
不专业:raise exception
专业 raise Notimplementerror(方法必须重写)
7.4以后看代码,揣摩心思
如何自定义异常类
主动抛出异常
捕获异常
8加密
9日志
为什么要有日志?
给开发人员看,用于排查错误
经典类和新式类
py2:经典类和新式类
新式类,如果自己或自己的前辈只要有人继承object,那么此类就是新式类
py3:新式类
经典类和新式类的查找成员的顺序不一样
经典类,一条道走到黑(深度优先)
新式类,C3算法实现