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)来模拟对象 ...
随机推荐
- 启动多个mysql实例
如果使用./support-files/mysql.server 文件启动,则默认读取/etc/my.cnf 配置文件,这种方式有时候启动不了 会提示报错 :The server quit witho ...
- python调用tushare获取A股上市公司管理层人员信息
接口:stk_managers 描述:获取上市公司管理层 注:tushare模块下载和安装教程,请查阅我之前的文章 积分:用户需要2000积分才可以调取,具体请参阅本文最下方积分获取办法 输入参数 名 ...
- web APP 开发之踩坑手记
屏蔽输入框怪异的内阴影 -webkit-appearance:none 禁止自动识别电话和邮箱 <meta content="telephone=no" name=" ...
- ES7/ES8 语法学习
作为一个前端开发者,感觉需要学习的东西贼多,ES6刚学会用没多久,又得学习了解ES7/ES8新增的东西,这里是看了大佬们文章的一点点总结以及摘抄的内容,给自己当笔记使用 内容转载自:https://w ...
- boost 实现读写锁
#include <boost/thread/shared_mutex.hpp> #include <boost/thread/locks.hpp> using BoostMu ...
- Codeigniter Session: Configured save path is not a directory
Codeigniter 3.x Message: Session: Configured save path '' is not a directory, doesn't exist or canno ...
- Jmeter-【JSON Extractor】-响应结果中二级key取值
一.请求返回样式 二.取chapter的值 三.查看结果
- 使用canvas绘制6X6调色盘
<canvas id="canvas" height="150" width="150"></canvas> var ...
- poi之Excel(在线生成)下载
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. poi之Excel下载 @RequestMappi ...
- 二分图染色+分组背包+bitset优化——hdu5313
首先就是求联通块,每个联通块里记录两个部分的元素个数 目标是使一边的体积接近n/2 那么每个联通块作为一组,进行分组背包,dp[i]表示体积i是否可以被凑出来,可行性背包是可以用bitset优化的 最 ...