类的继承

什么是继承

  • 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类可以称为基类或超类,新建的类称为派生类或子类
  • 继承的特性是:子类会遗传父类的属性
  • 继承是类与类之间的关系

为什么用继承

  • 子类会"遗传"父类的属性,从而使用继承可以减少代码冗余

对象的继承

  • python中支持继承一个或多个父类
class Parent1:
pass class Parent2:
pass class Son1(Parent1): # 单继承
pass class Son2(Parent1, Parent2): # 多继承
pass
  • 使用__bases__方法可以获取对象继承的类
print(Son2.__bases__)
print(Parent1.__bases__)
(<class '__main__.Parent1'>, <class '__main__.Parent2'>)
(<class 'object'>,)

新式类与经典类

  • 只有在python2中才分新式类和经典类,python3中统一都是新式类
  • 在python2中,声明继承object类的类,以及该类的子类,都是新式类;没有声明继承object类的类都是经典类
  • 在python3中,无论是否继承object,都默认继承object,即python3中所有类均为新式类

继承与抽象

继承描述的是子类与父类之间的关系,要找出这种关系,必须先抽象再继承,抽象即抽取类似或者说比较像的部分。

抽象分为两个层次:

1.将对象比较像的部分抽取成类
2.将类比较像的部分抽取成父类

继承:基于抽象的结果,通过编程语言去实现它,肯定是先经历抽象这个过程,才能通过继承的方式去表达出抽象的结构

继承的应用

  • 拿选课系统举例
class People:
def __init__(self, name, age, gender):
self.name = name
self.gender = gender
self.age = age class Student(People):
def choose_course(self):
print(f'{self.name} 选课') class Teacher(People):
def teach_course(self):
print(f'{self.name} 授课') stud = Student('tank', 18, 'male')
tea = Teacher('nick', 40, 'male') stud.choose_course()
tea.teach_course()
tank 选课
nick 授课

对象属性查找顺序

class People:
def __init__(self, name, age, gender):
self.name = name
self.gender = gender
self.age = age def choose_course(self):
print('from People') class Student(People):
def choose_course(self):
print('from Student') stud = Student('tank', 18, 'male')
stud.choose_course()
from Student
class People:
def __init__(self, name, age, gender):
self.name = name
self.gender = gender
self.age = age def choose_course(self):
print('from People') class Student(People):
pass stud = Student('tank', 18, 'male')
stud.choose_course()
from People

对象查找属性的顺序:对象自己--->对象的类--->父类--->父类。。。

day21-1 类的继承的更多相关文章

  1. UML类图(上):类、继承和实现

    面向对象设计 对于一个程序员来说,在工作的开始阶段通常都是别人把东西设计好,你来做.伴随着个人的成长,这个过程将慢慢变成自己设计一部分功能来实现,自己实现.如果要自己设计,无论是给自己看,还是给别人看 ...

  2. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  3. (转)Java:类与继承

    原文地址: http://www.cnblogs.com/dolphin0520/p/3803432.html 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大 ...

  4. iBatis.net 类的继承extends和懒加载

    <resultMaps> <resultMap id="FullResultMap" class="t_c_team_member_permission ...

  5. python 类定义 继承

    0 前言 系统:win7 64bit IDE : python(x,y) 2.7.6.1 IDE集成的解释器:Python 2.7.6 (default, Nov 10 2013, 19:24:18) ...

  6. JS原型继承和类式继承

    前言 一个多月前,卤煮读了一篇翻译过来的外国人写的技术博客.此君在博客中将js中的类(构造)继承和原型继承做了一些比较,并且得出了结论:建议诸位在开发是用原型继承.文中提到了各种原型继承的优点,详细的 ...

  7. Java编程里类的继承

    今天,我们将要讨论的内容是Java里面类的继承的相关概念. 说到继承,我相信大家都不陌生.生活中,子承父业,子女继承父母的财产,这就是继承.实际上,Java里的继承也是如此.对于一个类来说,它的数据成 ...

  8. Java:类与继承

    Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知 ...

  9. swift_Class类的继承

    //: Playground - noun: a place where people can play var str = "Hello, playground" //***** ...

  10. C#类的继承,方法的重载和覆写

    在网易云课堂上看到唐大仕老师讲解的关于类的继承.方法的重载和覆写的一段代码,注释比较详细,在此记下以加深理解. 小总结: 1.类的继承:允许的实例化方式:Student t=new Student() ...

随机推荐

  1. restlet 2.3.5 org.restlet包导入eclipse出现的com.sun.net.httpserver类包找不到问题

    准备过一遍restlet 2.3.5 JavaEE的源码. 环境 eclipse3.7.2 和 jdk 7.0 将org.restlet 包增加到eclipse中.出现 com.sun.net.htt ...

  2. Android系统优化

    这些事实上就是优化rom 的一些实用小技巧. 认为非常多还是实用的. Build.prop (编辑 /system/build.prop 文件(须要root, 能够用文件管理器或者其它root exp ...

  3. ZOJ 3870 Team Formation 贪心二进制

                                                    B - Team Formation Description For an upcoming progr ...

  4. grep 并列查询 效率 且 或

    find / | grep -v python | grep -v xl_ | grep -v xiaole |grep redis [root@hadoop3 ~]# find / | grep - ...

  5. Python: PS 图像特效 — 抽象画风

    今天介绍一种基于图像分割和color map 随机采样生成一种抽象画风的图像特效,简单来说,就是先生成一张 color map 图,颜色是渐变的,然后针对要处理的图像,进行分割,这里用的是 SLIC ...

  6. 就是这个foxmail有时出现记事同步不了

    昨天和妈妈商量还是要打算再次买一块正版电池,虽然她现在有点不情愿,但是过一个月再说,然后就是他的号码超出流量6M,由于是2G的流量,按照每M是一元,所以就是扣了6元,然后他的套餐里面显示还有94M也不 ...

  7. 【POI 2010】 Pilots

    [题目链接] 点击打开链接 [算法] 单调队列 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 3000010 ...

  8. [NOI2004]小H的小屋 贪心

    神仙贪心,洛谷没有插图导致我题一开始都没看懂.容易发现,块越多越优秀,然后为了满足题意,所以假如不能整除,就分为两个部分(能整除就直接均分就行了).前一部分是n/m,后一部分是n/m+1.数量也是固定 ...

  9. 第十一周 Leetcode 576. Out of Boundary Paths (HARD) 计数dp

    Leetcode 576 给定一个二维平面, 一个球在初始位置(i,j)每次可以转移到上下左右的一格. 问在N次转移内,有多少种路径可以转移出边境. dp[i][j][k]为 在点(i,j) 已经走了 ...

  10. sqlserver2000连接失败,不存在或拒绝访问

    一 看ping 服务器IP能否ping通. 这个实际上是看和远程sql server 2000服务器的物理连接是否存在.如果不行,请检查网络,查看配置,当然得确保远程sql server 2000服务 ...