zoukankan      html  css  js  c++  java
  • oop三大特征之继承

    1.什么是继承

      继承是一种关系,描述两个对象之间,什么是什么的对象。在程序中,继承描述的是类与类之间的关系。例如a继承了b,a就能直接使用b已经存在的方法和属性,其中a称之为子类,b称之为父类,也称为基类。

    2.为什么要使用继承:

      继承的一方可以直接使用被继承一方已经有的东西。其目的是为了重用已经有的代码,提高代码的重用性。减少代码重复,为多态提供必要的支持。

    3.如何使用继承

    class 类名称(父类的名称):
        类的内容
    # 在python中 一个子类可以同时继承多个父类

    4.继承与抽象

      继承描述的是子类与父类之间的关系。在有些例子中,子类虽然继承了父类并完成了代码的重用,可继承关系在逻辑上是错误的。oop的概念来自现实世界,所以应当遵循现实世界的逻辑。为了避免这种逻辑错误,我们可以将子类与父类间相同的部分参数抽取出来放到另一个类中,这个类称为公共父类。这个类与实际的业务需求是无关的在现实中也不实际存在,它的作用仅仅是存储相同代码以减少重复;这一过程我们称之为抽象。先抽象再继承。

    5.存在继承关系后的属性查找

      一个类必然继承另外一个类,被继承的类也有可能继承了其他的类,相当于C继承了B,B又继承了A。

      此时的查找顺序为 :对象本省的名称空间>>>类的名称空间>>>父类的名称空间>>>父类的父类的名称空间>>>object类。它会沿着继承关系一直往后找,直到找到为止,由于object是所有类的根类,所以不着最后都会去查找object类!

    6.派生与覆盖

    (1).什么是派生

      当父类提供的属性无法完全满足子类的需求时,子类可以增加自己的属性或非法,或者覆盖父类已经存在的属性,此时子类称之为父类的派生类;

    (2).什么是覆盖

      在子类中如果出现于父类相同的属性名称时,根据查找顺序,优先使用子类中的属性,这种行为也称为覆盖。

    7.经典类与新式类

      即使没有直接继承关系,super仍然会按照mro继续往后查找,而第一种方式明确指定了要到哪一个类中去查找,找不到则直接抛出异常。

    8.组合
      软件重用的重要方式除了继承之外还有另外一种方式,即:组合。组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合。

    组合与继承都是有效地利用已有类的资源的重要方式。但是二者的概念和使用场景皆不同,

    (1).继承的方式

    通过继承建立了派生类与基类之间的关系,它是一种'是'的关系,

    当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好。

    (2).组合的方式

    用组合的方式建立了类与组合的类之间的关系

    9.继承实现的原理

      如果继承关系为菱形结构,那么属性查找的方式有两种,分别是深度优先和广度优先,

      MRO列表并遵循如下三条准则: 1.子类会先于父类被检查 2.多个父类会根据它们在列表中的顺序被检查 3.如果对下一个类存在两个合法的选择,选择第一个父类 。

    2.oop三大特征之封装

    1.封装的简单介绍

      封装指的是隐藏对象的属性和实现细节,仅对外公开接口,控制程序中属性的访问权限;python中的权限有两种:一种是公开,外界可以直接访问和修改;另一种是不能直接由外界进行修改,但可以通过类完成修改。

    2.封装的必要性及封装方法

      封装的目的是为了限制属性的访问和修改,用来保护数据安全。

    封装方法:

      一个大的功能模块是由很多小功能组合而成的,而这些小模块对用户来说是没有意义的,所以封装的目的是为了隔离复杂度 。在属性名前添加两个下划线__。可将其设为私有。

    转载:https://www.cnblogs.com/blue-tea/p/11246599.html

  • 相关阅读:
    POJ 3468 A Simple Problem with Integers
    BZOJ 4430 Guessing Camels
    POJ 2309 BST
    POJ 1990 MooFest
    cf 822B Crossword solving
    cf B. Black Square
    cf 828 A. Restaurant Tables
    Codefroces 822C Hacker, pack your bags!
    [HDU 2255] 奔小康赚大钱
    [BZOJ 1735] Muddy Fields
  • 原文地址:https://www.cnblogs.com/longyi2020/p/14469877.html
Copyright © 2011-2022 走看看