继承

什么是继承:继承是新建类的一种方式,通过此方式生成的类称为子类、或者 派生类,被继承的类称为父类、基类或超类。在python中,一个子类可以继承多个父类。

继承的作用:减少代码的冗余,提高开发效率。

如何实现继承:在定义类的基础上,在类名后加上(父类名)。   class Teacher(Human):  ----------->Teacher类继承自Human类

类似于类和对象谁先有的关系,父类和子类的关系也类似。先在子类中抽象出父类,再改写子类进行继承。

在有继承关系的类中,实例化出的对象在查找相关属性时,会先在对象的名称空间中找,再到子类的名称空间中找,最后到父类的名称空间中找,若全部都找不到,就会报错。

派生

子类继承父类的属性与方法,并派生出属于自己的属性与方法。

如果子类中的方法名与父类中的重名,会优先使用子类的。相当于其他语言中的重写。

派生的两种实现方式:特别强调,在编程时,务必二选一,严禁混用

1、指名道姓式

# _*_ coding: gbk _*_
# @Author: Wonder
class Human:
def __init__(self, name, age):
self.name = name
self.age = age class Teacher(Human):
def __init__(self, name, age, gender):
Human.__init__(self, name, age)
self.gender = gender teacher1 = Teacher('abc', 19, 'male')
print(teacher1.name, teacher1.age, teacher1.gender) # abc 19 male

  

2、super (  )   方法

# _*_ coding: gbk _*_
# @Author: Wonder
class Human:
def __init__(self, name, age):
self.name = name
self.age = age class Student(Human):
def __init__(self, name, age, hobby):
super().__init__(name, age)
self.hobby = hobby student1 = Student('Henry', 18, 'swimming')
print(student1.name, student1.age, student1.hobby) # Henry 18 swimming

  

经典类与新式类

在python2中,如果没有明确标明是object的子类,都属于经典类。

在python3中,无论有没有标明是object的子类,全部都是新式类,可以理解为全部继承自object类。

在多继承的情况下,会将查找顺序写入mro列表中,

经典类的查找顺序:深度优先,一开始就刨根问底,此处的底一定不可以是object的子类。

新式类的查找顺序:广度优先,全部遍历完之后,最后触底object,python3中底可以不做任何申明,但python2中一定要声明object才可以当成新式类处理。

新式类提供了方法   .mro方法查看查找序列。super()方法是严格按照mro序列进行查找的,特别注意,有个广度优先原则在里面。

CSIC_716_20191126【面向对象编程--继承】的更多相关文章

  1. C++ Primer 学习笔记_69_面向对象编程 --继承情况下的类作用域

    面向对象编程 --继承情况下的类作用域 引言: 在继承情况下,派生类的作用域嵌套在基类作用域中:假设不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义. 正是这样的类作用域的层次嵌套使 ...

  2. Python 面向对象编程 继承 和多态

    Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...

  3. Python面向对象编程——继承与派生

    Python面向对象编程--继承与派生 一.初始继承 1.什么是继承 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题. 继承是一种创 ...

  4. Javascript 面向对象编程—继承和封装

      前  言 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类) ...

  5. Javascript 进阶 面向对象编程 继承的一个样例

    Javascript的难点就是面向对象编程,上一篇介绍了Javascript的两种继承方式:Javascript 进阶 继承.这篇使用一个样例来展示js怎样面向对象编程.以及怎样基于类实现继承. 1. ...

  6. Javascript 进阶 面向对象编程 继承的一个例子

    Javascript的难点就是面向对象编程,上一篇介绍了Javascript的两种继承方式:Javascript 进阶 继承,这篇使用一个例子来展示js如何面向对象编程,以及如何基于类实现继承. 1. ...

  7. python面向对象编程 继承 组合 接口和抽象类

    1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均用点来访问自己的 ...

  8. Py修行路 python基础 (十五)面向对象编程 继承 组合 接口和抽象类

    一.前提回忆: 1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均 ...

  9. 【前端学习】javascript面向对象编程(继承和复用)

    前言       继承,代码复用的一种模式.和其它高级程序语言相比,javascript有点点不一样,它是一门纯面向对象的语言,在JS中,没有类的概念,但也可以通过原型(prototype)来模拟对象 ...

随机推荐

  1. NIO 源码分析(03) 从 BIO 到 NIO

    目录 一.NIO 三大组件 Channels.Buffers.Selectors 1.1 Channel 和 Buffer 1.2 Selector 1.3 Linux IO 和 NIO 编程的区别 ...

  2. [已解决]报错:ValueError: Expected 2D array, got scalar array instead

    报错代码: new_x = 84610 pre_y = model.predict(new_x) print(pre_y) 报错结果: ValueError: Expected 2D array, g ...

  3. css渐变写法 从左到右渐变三种颜色示例;

    background:linear-gradient(to right,#7f06a8,#a02bc2,#7f06a8)

  4. springbot项目中使用继承

    package com.example.demo.controller; import com.sun.org.apache.bcel.internal.generic.NEW; import org ...

  5. 推荐20个让你学习并精通CSS的网站

    1. A List Apart CSS Topics A List Apart,学习网页设计和最佳实践的首选网站.这个网站从1999年就开始发表关于CSS的文章,其中大部分文章都是面向那些更注重符合标 ...

  6. RHEL5/6/7中常用命令及命令之间的差异

    System basics Task RHEL5 RHEL6 RHEL7 View subscription information /etc/sysconfig/rhn/systemid /etc/ ...

  7. jdk源码阅读-ConcurrentLinkedQueue(一)

    说明 concurrentLinkedQueue为无界非阻塞队列,是线程安全的 内部结构为链表的形式, 内部使用cas保存线程安全.采用cas保证原子性 什么是CAS CAS 操作包含三个操作数 —— ...

  8. GIT 部分记录

    关于版本回退 git reset HEAD^  #回退a.py这个文件的版本到上一个版本  git reset HEAD^ a.py  git reset HEAD a.py  我试了一下以上2种方式 ...

  9. ubuntu配置阿里云源

    换成国内最快的阿里云源 第一步:备份原来的源文件 cd /etc/apt/ 然后会显示下面的源文件sources.list 输入命令 sudo cp sources.list sources.list ...

  10. bzoj1007题解

    [题意分析] 给你n个上半平面,求包含这些上半平面的交的上半平面. [解题思路] 按斜率排序,用单调栈维护一个下凸壳即可.复杂度O(nlog2n). [参考代码] #include <cctyp ...