面向对象

  

1、编程模式

面向过程  根据业务实现流程和逻辑,逐步完成python

函数式编程  将功能写入函数,方便调用数据库

面向对象  将函数打包,用类封装,实现更强大功能,更符合人对世界的认知过程编程

 

2、面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)的实现过程

 类是个封装器,是用来封装方法和数据的。函数式编程

不是全部状况都适用面向对象编程。函数

 

 

 

 class 类名:fetch

  def 方法(self,arg):    #self形式参数不能省略spa

    pass设计

obj = 方法()    #建立实例/对象,对象实现类中的方法code

 

 

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
"""

 

  • 面向对象:【建立对象】【经过对象执行方法】
  • 函数编程:【执行函数】

函数式编程的应用场景 --> 各个函数之间独立且无共用的数据对象

 

3、面向对象三大特性

封装、继承和多态。

 

封装

封装,顾名思义就是将内容封装到某个地方,之后再去调用被封装在某处的内容。

因此,在使用面向对象的封装特性时,须要:

  • 将内容封装到某处
  • 从某处调用被封装的内容

 

继承

子类继承父类

某一只狗就是只是狗中的一员,不会是猫,不克隆有猫的那些共有特征和能力。

对于面向对象的继承来讲,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而没必要一一实现每一个方法。

 

 

 

派生类能够继承基类中全部的功能

派生类和基类同时存在,优先找派生类

 

 

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>
"""
相关文章
相关标签/搜索