zoukankan      html  css  js  c++  java
  • 面向对象

      

    一、编程模式

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

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

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

    二、面向对象编程(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>
    """
  • 相关阅读:
    Kibana6.8.6简单操作手册
    自学思科SD-WAN Zero Touch Provisioning(ZTP)零接触配置
    自学思科SD-WAN Zone Based Firewall(ZBF)区域防火墙
    自学思科SD-WAN Application Aware Routing(AAR)应用感知路由
    自学思科SD-WAN策略框架-本地策略(控制策略+数据策略)
    自学思科SD-WAN策略框架-集中式数据策略
    自学思科SD-WAN策略框架-集中式控制策略
    国密算法说明SM2、SM3、SM4
    Docker Desktop 通过本地命令运行.net core程序
    关于windows使用docker的总结
  • 原文地址:https://www.cnblogs.com/ttrrpp/p/6714527.html
Copyright © 2011-2022 走看看