一.继承

  继承就是子类与父类形成的一种关系,可以让子类能直接从父类中获取属性与方法

  优点:减少了类与类之间的代码冗余

  语法:

    class 父类: # 父类是多个有共同点的普通类抽离共有属性与方法形成的类

      pass  

    class 类名(父类名):

      pass

  1.继承的信息

    1.父类的所有未封装的属性和方法,子类都能访问

    2.父类的所有封装的属性和方法,子类都不能访问

        -- 在外界通过子类或子类对象,不能访问

        -- 在子类内部也不能访问

  2.有父类时的属性(方法)的查找顺序

     class Sup:

       num = 10

       def test(self):

         print('sup test')

     class Sub(Sup):

       num = 20

       def test(self):

         print('sub test')

    print(num) # 20

    print(Sub.test()) # sub test

    1.优先找自身,自身没有找父类

    2.父类没有找父类的父类

    3.一直找到最顶级的父类,如果还没有则报错

  3.方法的重写

    继承与派生

    先写子类,抽离 出父类

    先写父类,派生 出子类

    如果先写父类,由于父类的方法功能不能满足子类的需求

    子类可以重写父类的方法:方法名与父类相同,自定义方法的实现体

     class Sup:

       def test(self):

         print('sup test')

     class Sub(Sup):

       def test(self):

         print('sub test')

  4.方法的重用

    重用:还需要使用父类的功能,在父类的方法功能基础上再添加新功能

    突破点:在子类中调用父类的方法,还要保证调用者是子类(子类对象)

    子类中利用super(子类,当前子类对象)可以调用父类的方法

    python3中可以简写为super()

     class Sup:

       def test(self):

         print('sup test')

     class Sub(Sup):

       def test(self):

         super().test()

         print('sub test')

     Sub().test() # sup test sub test

  5.__init__结合super()使用      

    class Sup:

       def test(self):
    print(self)    def __init__(self, name):
   self.name = name
   class Sub(Sup):
# 有继承关系下,只要名字相同,即使产生不同,还是属于同一个方法
  def test(self, num):
   super().test()
   print(num) # 默认父级的__init__可以被继承过来,
# 但是会出现子类对象的属性比父类多    def __init__(self, name, salary):
  super().__init__(name) # 父级有的共性功能通过super()交给父级做
  self.salary = salary # 子类特有的自己来完成   # Sub().test(10)
  # Sub().test() # 使用还是使用自身带参的,不能使用父级不带参的
  # (本质名字相同就是一个,优先查找自己的)

  6.多继承

    1.简单的多继承
    # 属性的查找顺序:优先找自己的,如果没有,按照继承先后查找父级
      class A:
        name = 'A'
        num = 10

      class B:
        name = 'B'
        count = 100
    # 子类可以继承所有父类的所有可继承属性
      class C(A, B): # 自己 => A => B
        name = 'C'
        pass
      print(C.num)
      print(C.count)
      print(C.name)
    # 打印属性查找的顺序
      print(C.mro())

    # 经典类:python2中才有,没有继承任何类的类
    # 新式类:python2中直接或间接继承object的类,python中所定义的所有类
      class G: name = "G"
      class C(G): pass
      class B(C): pass
      class E(G): pass
      class D(E): name = "D"
      class F(G): pass
      class A(B, D, F): pass
      print(A.mro()) # [<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>,

       <class '__main__.D'>, <class '__main__.E'>, <class '__main__.F'>, <class '__main__.G'>, <class 'object'>]

二.组合

  # 自定义类的对象作为另外一个类的属性

  class Teacher:
  def __init__(self, name, age):
  self.name = name
  self.age = age   t1 = Teacher("Owen", 17)
  print(type(t1.name), type(t1.age))   class Student:
  # 学生可以有 老师 属性
  def __init__(self, name, age, teacher):
  self.name = name
  self.age = age
   # 自定义类的对象作为类的属性:组合
   self.teacher = teacher

    

DAY 24继承与组合的更多相关文章

  1. Java中的继承与组合

    本文主要说明Java中继承与组合的概念,以及它们之间的联系与区别.首先文章会给出一小段代码示例,用于展示到底什么是继承.然后演示如何通过“组合”来改进这种继承的设计机制.最后总结这两者的应用场景,即到 ...

  2. Python面向对象的三大特性之继承和组合

    继承和组合 一.组合 组合:组合指的是,在一个类中以另外一个类的对象(也就是实例)作为数据属性,称为类的组合 也就是说:一个类的属性是另一个类的对象,就是组合 例子: 圆环是由两个圆组成的,圆环的面积 ...

  3. 关于Java中的继承和组合的一个错误使用的例子

    [TOC] 关于Java中的继承和组合的一个错误使用的例子 相信绝大多数人都比较熟悉Java中的「继承」和「组合」这两个东西,本篇文章就主要就这两个话题谈论一下.如果我某些地方写的不对,或者比较幼稚, ...

  4. Java继承与组合

    Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...

  5. [Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类

    目录 第一章 对象导论第二章 一切都是对象第三章 操作符第四章 控制执行流程第五章 初始化与清理第六章 访问权限控制第七章 复用类第九章 接口 第一章 对象导论 1. 对象的数据位于何处? 有两种方式 ...

  6. java 中继承,组合,重载,重写的实现原理 (转)

    我们知道,继承,组合,重载,重写是java语言的面向对象实现的基本特征. 那么在java内部,究竟是如何实现这些面对对象的基本特征的呢? 继承和组合是面向对象中代码复用的主要实现方式,他们可以达到类似 ...

  7. <Java中的继承和组合之间的联系和区别>

    //Java中的继承和组合之间的联系和区别 //本例是继承 class Animal { private void beat() { System.out.println("心胀跳动...& ...

  8. Java中的继承与组合(转载)

    本文主要说明Java中继承与组合的概念,以及它们之间的联系与区别.首先文章会给出一小段代码示例,用于展示到底什么是继承.然后演示如何通过“组合”来改进这种继承的设计机制.最后总结这两者的应用场景,即到 ...

  9. [Objective-c 基础 - 2.3] 继承、组合

    A.继承的实现: is a 1.不允许子类.父类存在相同的成员变量 2.方法调用优先原则:子类调用方法的时候,优先从本类寻找,若无则向上在父类中寻找 3.重写:子类重新实现父类的方法,覆盖父类之前的方 ...

随机推荐

  1. Oauth2.0安全问题浅谈

    大家如果对Oauth还不是很了解可以先看下这篇文章https://www.cnblogs.com/maoxiaolv/p/5838680.html 我这篇博客主要是总结一下安全测试过程中遇到Oauth ...

  2. C/C++ 获取系统时间 到秒 || 到毫秒

    string getNowSysTime(string &outPut) { ] = {}; struct timeval tv; struct timezone tz; struct tm ...

  3. php----------linux下安装php的swoole扩展

    1.首先你已经安装好了php环境,这里就不介绍php环境的安装了.如果你是编译安装记得将php加入环境变量,以便于方便查看扩展是否安装成功. 2.我安装的php环境缺少了要给东西,详细看下图 如果你没 ...

  4. 解决:启用多线程调用webBrowsers函数报错:指定的转换无效

    这里就需要委托. 定义一个 委托.加载之后给他绑定一个方法Callback,也就是所说的回掉函数. 然后写一个线程,线程需要一个object 的参数.将你定义的委托当作参数传进线程中的方法. 在线程中 ...

  5. caffe程序中出现的db.cpp:#line(行号) unknown database backend问题

    报错原因:lmdb不可用 解决方法:Makefile.config将此处更改 CPU_ONLY := 1 #如果只使用CPU的话就改这个,使用GPU的不需要改 USE_OPENCV := 1 #有安装 ...

  6. 蓝桥杯c/c++省赛真题——明码

    标题:明码 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛.###16点阵的字库把每个汉字看成是16x16个像素信息.并把这些信息记录在字节中. ###一个字节可以存储8位信息,用3 ...

  7. nginx安装SSL证书,并强制跳转https访问

    网站最初是nginx代理80端口,实现http访问的.现在要安装SSL证书,使用https访问. 我的nginx根目录是/usr/local/nginx,将申请的SSL证书和key放在/usr/loc ...

  8. pickel加速caffe读图

    64*64*3小图(12KB),batchSize=128,训练样本100万, 全部load进来内存受不了,load一次需要大半天 训练时读入一个batch,ali云服务器上每个batch读入时间1. ...

  9. Linux系统下为普通用户加sudo权限

    Linux下为普通账号加sudo权限 1. 错误提示:当我们使用sudo命令切换用户的时候可能会遇到提示以下错误:xxx is not in the sudoers file. This incide ...

  10. ARM Mcp2515添加驱动

    Mcp2515添加驱动   2012-01-10 21:39:32 上图1: 上图2: 上图3: 之前完成了spi接口驱动,所以mcp2515也是通过spi来读写数据的.就是多加一个中断脚. 另外在2 ...