面向对象
一、编程模式
面向过程 根据业务实现流程和逻辑,逐步完成
函数式编程 将功能写入函数,方便调用
面向对象 将函数打包,用类封装,实现更强大功能,更符合人对世界的认知过程
二、面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)的实现过程
类是个封装器,是用来封装方法和数据的。
不是所有情况都适用面向对象编程。
class 类名:
def 方法(self,arg): #self形式参数不能省略
pass
obj = 方法() #创建实例/对象,对象实现类中的方法
class lei: def fetch(self): print(self.backend) def add_record(self): print(self.backend) def del_record(self): print(self.backend) obj = lei() obj.backend = "www.baidu.com" #在对象中封装数据 obj.fetch() obj.add_record() #执行方法,执行过程中根据self去obj对象中读取已经封装的数据 obj.del_record() """ www.baidu.com www.baidu.com www.baidu.com """
- 面向对象:【创建对象】【通过对象执行方法】
- 函数编程:【执行函数】
函数式编程的应用场景 --> 各个函数之间独立且无共用的数据
三、面向对象三大特性
封装、继承和多态。
封装
封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。
所以,在使用面向对象的封装特性时,需要:
- 将内容封装到某处
- 从某处调用被封装的内容
继承
子类继承父类
某一只狗就是只是狗中的一员,不会是猫,不克隆有猫的那些共有特征和能力。
对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法。
派生类可以继承基类中所有的功能
派生类和基类同时存在,优先找派生类
python类可以同时继承多个类(C#,Java不可以)
优先:自己,左边,右边
多继承
扩展:
重载:函数名相同,参数个数不同(python不支持)
重写:派生类中重新实现基类中的方法
多态
多态就是多种形态。
python是原生多态。
类+括号 >>> 自动执行类中的__init__方法
在__init__方法中执行具体封装的操作
__init__有一个特殊的名字:构造方法 >>>初始化
__del__ 解释器销毁对象的时候自动调用,特殊的名字:析构方法
封装:
使用场景:当同一类型的方法具有相同的参数时,直接封装到对象即可。
使用场景:把类当作模板,创建多个对象(对象内封装的数据可以不一样)
单例模式
单个实例。
使用场景:
创建的实例都是一样的,没有必要在内存中保存多份,可归结为一个对象。
数据库链接池
实现方式:静态方法 + 静态字段
class ConnectionPoll: __instance = None def __init__(self): self.ip = "1.1.1.1" self.port = 3306 self.pwd = 123 self.username = "root" self.conn_list = [1,2,3,4,5,6,7] @staticmethod def get_instance(): if ConnectionPoll.__instance: return ConnectionPoll.__instance else: ConnectionPoll.__instance = ConnectionPoll() return ConnectionPoll.__instance obj1 = ConnectionPoll.get_instance() print(obj1) obj2 = ConnectionPoll.get_instance() print(obj2) """ <__main__.ConnectionPoll instance at 0x026315D0> <__main__.ConnectionPoll instance at 0x026315D0> """