• 【OOP】面向对象的程序开发


    类是对象的实例子

    面向对象的三大特征:封装,继承,多态

    封装:对类中成员属性和方法的保护,控制外界对内部成员的访问,修改,删除等操作

    继承:一个类除了自身所拥有的属性方法之外,还获取了另外一个类的成员属性和方法

    多态:不同的子类对象,调用相同的父类方法,产生不同的执行结果

    ### python对成员的保护分为两个等级

    ```
    私有的: private
    在本类内部可以访问,类的外部不可以访问.(python中 属性或者方法前面加上两个下划线__)
    公有的: public
    在本类的内部和外部都可以访问.
    #(了解)在其他高级语言当中,如java php c++等语言,有三个等级 private public protected
    ```

    ```
    # 私有成员的改名策略 [_类名__成员名]
    # 对象的相关操作
    (1)实例化的对象访问公有成员属性和方法
    (2)实例化的对象动态添加公有成员属性和方法
    (3)实例化的对象删除公有成员属性和方法
    # 类的相关操作
    (1)定义的类访问公有成员属性和方法
    (2)定义的类动态添加公有成员属性和方法
    (3)定义的类删除公有成员属性和方法

    普通方法: 没有任何参数传递,只能类调用
    绑定方法: 把默认传参的方法叫做绑定方法,绑定到对象(默认传对象),绑定到类(默认传类)
    非绑定方法:静态方法(无需传任何参数,对象和类都能调用)
    ```

    ```
    私有的:只能载类或者对象的结构中访问
    公有的:可以载任何位置访问
    受保护:可以载当前类或者对象 和子类或者子类对象中访问

    类内 子类中 类外部
    公有的: √ √ √
    私有的: √ X X
    受保护: √ √ X (python语言不支持)
    ```

    ### 多继承弊端
    ```
    多继承的弊端会造成菱形继承这种情况,找不清调用顺序
    super对象按照mro列表的顺序依次调用,解决菱形继承存在的问题

    经典类:深度优先 (python2.x)
    新式类:广度优先 (python3.x)

    写多继承时,尽量避免造成不同类相同方法名的情况,提高代码质量 高内聚,低耦合
    高内聚:一个模块只完成一个任务,专一性高
    低耦合:模块与模块之间可以彼此独立不冲突,方便移植复用.
    ```
    ### super调用父类方法
    ```
    (1)super本身是一个类 super()是一个对象 用于调用父类的绑定方法
    (2)super() 只应用在绑定方法中,默认自动传递self对象 (前提:super所在作用域存在self)
    (3)super用途: 解决复杂的多继承调用顺序
    ```

    ### 魔术方法(特定时机自动触发)

    ```
    #__init__魔术方法(构造方法)
    '''
    触发时机:实例化对象,初始化的时候触发
    功能:为对象添加成员
    参数:参数不固定,至少一个self参数
    返回值:无
    '''
    ```
    ```
    #__new__ 魔术方法
    '''
    触发时机:实例化类生成对象的时候触发(触发时机在__init__之前)
    功能:控制对象的创建过程
    参数:至少一个cls接受当前的类,其他根据情况决定
    返回值:通常返回对象或None
    '''
    ```
    ```
    #__del__ 魔术方法(析构方法)
    '''
    触发时机:当对象被内存回收的时候自动触发[1.页面执行完毕回收所有变量 2.所有对象被del的时候]
    功能:对象使用完毕后资源回收
    参数:一个self接受对象
    返回值:无
    '''
    ```
    ```
    #__call__ 魔术方法
    '''
    触发时机:把对象当作函数调用的时候自动触发
    功能: 模拟函数化操作
    参数: 参数不固定,至少一个self参数
    返回值: 看需求
    '''
    ```
    ```
    #__str__ 魔术方法
    '''
    触发时机: 使用print(对象)或者str(对象)的时候触发
    功能: 查看对象
    参数: 一个self接受当前对象
    返回值: 必须返回字符串类型
    '''
    ```
    ```
    #__repr__ 魔术方法
    '''
    触发时机: 使用repr(对象)的时候触发
    功能: 查看对象,与魔术方法__str__相似
    参数: 一个self接受当前对象
    返回值: 必须返回字符串类型
    '''
    ```
    ```
    #----普通变量的基本操作,如果应用在对象上,也有相应的魔术方法

    #__bool__ 魔术方法
    '''
    触发时机:使用bool(对象)的时候自动触发
    功能:强转对象
    参数:一个self接受当前对象
    返回值:必须是布尔类型
    '''
    '''
    类似的还有如下等等(了解):
    __complex__(self) 被complex强转对象时调用
    __int__(self) 被int强转对象时调用
    __float__(self) 被float强转对象时调用
    ...
    ...
    '''
    ```

    ```
    #__add__ 魔术方法 (与之相关的__radd__ 反向加法)
    '''
    触发时机:使用对象进行运算相加的时候自动触发
    功能:对象运算
    参数:二个对象参数
    返回值:运算后的值
    '''
    '''
    类似的还有如下等等(了解):
    __sub__(self, other) 定义减法的行为:-
    __mul__(self, other) 定义乘法的行为:
    __truediv__(self, other) 定义真除法的行为:/
    ...
    ...
    '''
    ```
    ```
    #__len__ 魔术方法
    '''
    触发时机:使用len(对象)的时候自动触发
    功能:用于检测对象中或者类中某个内容的个数
    参数:一个self接受当前对象
    返回值:必须返回整型
    '''
    '''
    类似的还有如下等等(了解):
    __iter__(self) 定义迭代容器中的元素的行为
    __reversed__(self) 定义当被 reversed() 调用时的行为
    __contains__(self, item) 定义当使用成员测试运算符(in 或 not in)时的行为
    ...
    ...
    '''
    ```


    ### 编程语言的发行时间

    ```
    1972 C
    1983 C++(即带有类概念的C语言,更名于1983年7月)
    1989 Python
    1991 Visual Basic
    1993 Ruby
    1995 JavaScript
    1995 PHP
    1996 Java
    2001 C#
    2009 Go
    ```

  • 相关阅读:
    js的循环遍历
    实现div里的img图片水平垂直居中(五种方法)——转载好文
    layui 的 loading 左偏移
    小茴香windows常用软件清单
    Vue为同一个元素绑定不同的点击事件
    echarts 线图图例去掉圆圈等形状
    No phantomjs found in your PATH. Please install it! pyecharts导出图片报错 windows
    mysql多列一致性约束unique
    笔试题-LRU
    准确率和召回率
  • 原文地址:https://www.cnblogs.com/bonnyxinxin/p/13026512.html
Copyright © 2020-2023  润新知