CSIC_716_20191126【面向对象编程--继承】
继承
什么是继承:继承是新建类的一种方式,通过此方式生成的类称为子类、或者 派生类,被继承的类称为父类、基类或超类。在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【面向对象编程--继承】的更多相关文章
- C++ Primer 学习笔记_69_面向对象编程 --继承情况下的类作用域
面向对象编程 --继承情况下的类作用域 引言: 在继承情况下,派生类的作用域嵌套在基类作用域中:假设不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义. 正是这样的类作用域的层次嵌套使 ...
- Python 面向对象编程 继承 和多态
Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...
- Python面向对象编程——继承与派生
Python面向对象编程--继承与派生 一.初始继承 1.什么是继承 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题. 继承是一种创 ...
- Javascript 面向对象编程—继承和封装
前 言 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类) ...
- Javascript 进阶 面向对象编程 继承的一个样例
Javascript的难点就是面向对象编程,上一篇介绍了Javascript的两种继承方式:Javascript 进阶 继承.这篇使用一个样例来展示js怎样面向对象编程.以及怎样基于类实现继承. 1. ...
- Javascript 进阶 面向对象编程 继承的一个例子
Javascript的难点就是面向对象编程,上一篇介绍了Javascript的两种继承方式:Javascript 进阶 继承,这篇使用一个例子来展示js如何面向对象编程,以及如何基于类实现继承. 1. ...
- python面向对象编程 继承 组合 接口和抽象类
1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均用点来访问自己的 ...
- Py修行路 python基础 (十五)面向对象编程 继承 组合 接口和抽象类
一.前提回忆: 1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均 ...
- 【前端学习】javascript面向对象编程(继承和复用)
前言 继承,代码复用的一种模式.和其它高级程序语言相比,javascript有点点不一样,它是一门纯面向对象的语言,在JS中,没有类的概念,但也可以通过原型(prototype)来模拟对象 ...
随机推荐
- USACO Running Away From the Barn /// 可并堆 左偏树维护大顶堆
题目大意: 给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于m的点有多少个 左偏树 https://blog.csdn.net/pengwill97/article/details/82 ...
- android项目各个文件详解
res目录说明 android应用的res目录是一个特殊的目录,该项目里存放了 android应用所用的全部资源,包括图片资源.字符串资源. 颜色资源.尺寸资源等. /res/value/string ...
- 2019-4-29-.NET-Standard
title author date CreateTime categories .NET Standard lindexi 2019-4-29 12:7:26 +0800 2018-2-13 17:2 ...
- 关于虚拟机中linux系统时间的问题
由于考试需求,我在vm上放置了考试用的linux环境,在进行操作的时候需要回调时间才能进行一些操作.但是每次重启之后,时间总是会和物理服务器的时间进行同步,让我非常的苦恼. 终于有一天我想清楚了如何表 ...
- 【学术篇】2.28测试T2 线段 拓扑排序
题目: 思路: 看到这种找前后的题目... 第一反应就是拓扑排序_(:з」∠)_ 每条线段都有左右两个端点咯, 然后就乱搞吧.. 我们用\(i\)和\(i'\)分别表示第\(i\)条线段的左右端点.. ...
- Vue登录登出以及JWT认证
数据模型 主要用户名,密码,邮箱,头像,身份 const mongoose = require('mongoose') const schema = new mongoose.Schema({ use ...
- unity 打包Apk生成签名证书keystore
进行Android项目开发中想要将androidapp导出为apk的时候需要选择一个数字证书,即keystore文件(android.keystore),它用来对我们的APP进行签名,是导出APP的一 ...
- CSS盒模型及应用
其实,CSS就三个大模块: 盒子模型 . 浮动 . 定位,其余的都是细节.要求这三部分,无论如何也要学的非常精通. 所谓盒子模型就是把HTML页面中的元素看作是一个矩形的盒子,也就是一个盛装内容的容器 ...
- thinkphp 性能调试
开发过程中,有些时候为了测试性能,经常需要调试某段代码的运行时间或者内存占用开销,系统提供了G方法可以很方便的获取某个区间的运行时间和内存占用情况. 例如: 富瑞联华大理石平台大理石平台检定规程 G( ...
- bcc-tools工具之profile
profile是用于追踪程序执行调用流程的工具,类似于perf中的-g指令 相比perf -g而言,profile功能化更加细分,可以根据需要选择追踪层面,例如-U(用户要调用流程) -K (内核态调 ...