继承:可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

  通过继承创建的新类称为“子类”或“派生类”。

  被继承的类称为“基类”、“父类”或“超类”。

  继承的过程,就是从一般到特殊的过程。

  要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。

在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

继承概念的实现方式主要有2类:实现继承、接口继承。

         实现继承:使用基类的属性和方法而无需额外编码的能力;
         接口继承:仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构父类方法);
* 注:在考虑使用继承时,两个类之间的关系应该是“属于”关系。例如,“学生”是一个人,“老师” 也是一个人,因此这两个类都可以继承 “人”这个 类。但是 “腿”这个类却不能继承 “人”这个类,因为“腿”并不是一个人。
 
抽象类仅定义由子类创建的一般属性和方法。

OOP开发范式大致为:划分对象→抽象类→将类组织成层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。

实例:

仅继承,不做任何其他事。
# class People  经典类写法
# 经典类与新式类的主要区别在继承方式
class People(object): # 新式类写法
def __init__(self,name,age):
self.name = name
self.age = age def eat(self):
print('%s正在吃东西。'%self.name) def sleep(self):
print('%s正在睡觉。'%self.name) # 仅继承,不做任何其他事
class Man(People): # 继承父类 People
pass m1 = Man('simple',25)
m1.eat()
m1.sleep()

继承在做一些自己的事。

# class People  经典类写法
# 经典类与新式类的主要区别在继承方式
class People(object): # 新式类写法
def __init__(self,name,age):
self.name = name
self.age = age def eat(self):
print('%s正在吃东西。'%self.name) def sleep(self):
print('%s正在睡觉。'%self.name) # 继承,在做一些自己的事
class Man(People): # 继承父类 People
def learning(self):
print('%s正在学习。'%self.name) m1 = Man('simple',25)
m1.eat()
m1.learning()

重构父类: 继承,并给父类增加功能(重构父类):先执行父类,在执行子类。(父类和子类都含有相同名称的函数)

# class People  经典类写法
# 经典类与新式类的主要区别在继承方式
class People(object): # 新式类写法
def __init__(self,name,age):
self.name = name
self.age = age def eat(self):
print('%s正在吃东西。'%self.name) def sleep(self):
print('%s正在睡觉。'%self.name) # 重构父类: 继承,并给父类增加功能(重构父类):先执行父类,在执行子类
class Man(People): # 继承父类 People
def learning(self):
print('%s正在学习。'%self.name) def sleep(self):
People.sleep(self)
print('子类要做一些事。')
m1 = Man('simple',25)
m1.sleep() # 先执行父类sleep,返回:simple正在睡觉。 在执行子类sleep,返回:子类要做一些事。

一个父类同时被多个子类继承

# class People  经典类写法
# 经典类与新式类的主要区别在继承方式
class People(object): # 新式类写法
def __init__(self,name,age):
self.name = name
self.age = age def eat(self):
print('%s正在吃东西。'%self.name) def sleep(self):
print('%s正在睡觉。'%self.name) # 定义第一个子类
class Man(People): # 继承父类 People
def learning(self):
print('%s正在学习。' % self.name)
def sleep(self):
People.sleep(self)
print('子类要做一些事。') # 定义第二个子类
class Woman(People):
def sing(self):
print('%s在唱歌'%self.name) m1 = Man('simple',25)
m1.sleep() # simple正在睡觉。 # 子类要做一些事。 w1 = Woman('simgirl',25)
w1.sing()

重构父类,增加子类传入参数个数。

# class People  经典类写法
# 经典类与新式类的主要区别在继承方式
class People(object): # 新式类写法
def __init__(self,name,age):
self.name = name
self.age = age def eat(self):
print('%s正在吃东西。'%self.name) def sleep(self):
print('%s正在睡觉。'%self.name) # 重构父类,增加子类传入参数的个数
class Man(People): # 继承父类 People
def __init__(self,name,age,money):
# People.__init__(self,name,age) # 经典写法,如果更改了父类名称,此处也需要更改
super(Man,self).__init__(name,age) # 形式写法,建议使用此方法。因为,如果更改了父类名称,此处不需要更改
self.money = money
print('%s的初始金额为:%s'%(self.name,self.money))
def learning(self):
print('%s正在学习。' % self.name)
def sleep(self):
People.sleep(self) # 执行父类方法
print('子类要做一些事。') m1 = Man('simple',25,100)
m1.sleep()
m1.eat()

多继承

# 第一个父类
class People(object):
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print('%s正在吃东西。'%self.name) # 第二个父类
class Relation(object):
def meak_friends(self,obj):
print('%s和%s在搞对象。'%(self.name,obj.name)) # name 从People继承,在实例化的时候生成。 class Man(Relation,People):
pass class Woman(People, Relation):
pass m1 = Man('simple',25)
w1 = Woman('simgirl',25) m1.meak_friends(w1)
w1.meak_friends(m1)

继承方式:

  python2 经典类按深度优先继承,新式类按广度优先。
  python3 都是按照广度优先继承。

class A:
def __init__(self):
print('a') class B(A):
pass
def __init__(self):
print('b') class C(A):
def __init__(self):
print('c') class D(B,C):
pass
def __init__(self):
print('d') d1 = D() # 执行顺序,广度优先:D -> B -> C -> A # python2执行顺序,深度优先:D -> B -> A
 

初识python: 继承的更多相关文章

  1. Python开发【第一篇】:初识Python

    初识python 一.python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解 ...

  2. Python开发【第二篇】:初识Python

    Python开发[第二篇]:初识Python   Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏 ...

  3. 初识python面向对象

    一.初识python面向对象: class Person: #使用class关键字定义一个类 age=0 #类变量(静态变量) def eat(self,food): #定义一个方法 self.age ...

  4. 孤荷凌寒自学python第三十八天初识python的线程控制

     孤荷凌寒自学python第三十八天初识python的线程控制 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.线程 在操作系统中存在着很多的可执行的应用程序,每个应用程序启动后,就可以看 ...

  5. 孤荷凌寒自学python第二十一天初识python的类

    孤荷凌寒自学python第二十一天初识python的类 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 类是面向对象的编程语言非常重要的概念. 编程语言的进化史中从顺序编程到结构化编程,最后才 ...

  6. Python导出Excel为Lua/Json/Xml实例教程(一):初识Python

    Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...

  7. python 继承中的super

    python继承中子类访问父类的方法(包括__init__)主要有两种方法,一种是调用父类的未绑定方法,另一种是使用super(仅仅对于新式类),看下面的两个例子: #coding:utf-8 cla ...

  8. python继承

    Python继承 继承实例: 父类和子类的关系: 继承树: 没有父类就继承object类,不要忘记调用super().__init__来初始化父类 代码: class Person(object): ...

  9. 篇2 安卓app自动化测试-初识python调用appium

    篇2              安卓app自动化测试-初识python调用appium --lamecho辣么丑 1.1概要 大家好!我是lamecho(辣么丑),上一篇也是<安卓app自动化测 ...

  10. 2017-06-22初识python

    初识python #!/usr/bin/env python (python解释器的文件路径)# -*- coding:utf-8 -*- (使用的编码内型)# python 2.7 <需要加第 ...

随机推荐

  1. ubuntu qq/微信

    Ubuntu qq&微信安装/启动脚本. Docker 本脚本依赖Docker,需要提前安装好Docker环境.参考https://yeasy.gitbooks.io/docker_pract ...

  2. [笔记] Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting

    原文地址:https://arxiv.org/abs/2012.07436 源码地址:https://github.com/zhouhaoyi/Informer2020

  3. Mysql安全加固

    1.确保MYSQL_PWD环境变量未设置 描述 MYSQL_PWD环境变量的使用意味着MYSQL凭证的明文存储,极大增加MySQL凭据泄露风险. 加固建议 删除系统环境变量中MySQL密码(MYSQL ...

  4. 配置文件管理维护到gitlab上

    一.简介 在日常维护服务器中,会修改配置文件或者相应脚本,在修改前要对文件进行按照日期备份,这样会很麻烦,频繁修改的时候也会懒得去备份多个. 维护脚本分为服务端和客户端,服务端监听端口,接收客户端的采 ...

  5. Python语法之基本数据类型

    一.数据类型之字符串str 作用:主要用于记录描述性性质的数据,如姓名.地址.邮箱: 定义: 方式1 # 单引号 name = 'jason' 方式2 # 双引号 name = "jason ...

  6. CTFHub[PWN技能树]——栈溢出

    文章目录 一.ret2text 二.ret2shellcode 一.ret2text 例行检查,64位程序,没有开启任何保护 本地运行一下情况,看看大概的情况 64位ida载入,检索程序里的字符串发现 ...

  7. [BUUCTF]REVERSE——新年快乐

    新年快乐 附件 例行查壳儿,32位程序,upx加壳儿 利用网上找到的脱壳儿工具,拿到了去壳儿后的程序 32位ida打开,shift+f12查看程序里的字符串,得到了关于flag的提示 双击,ctrl+ ...

  8. 月薪过2w的IT程序员都是怎么做到的?

    ​  先说结论:要月入过2万,不能仅仅靠技术,更要找个肯给到这份工资的平台.也就是说,尽量去大城市,尽量去大公司. 我在上海,先说下我知道的薪资情况,基本上,只要有3年开发经验,能过大厂或外企的面试, ...

  9. 显示摘要任务(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 用熬肥的同学都知道,在熬肥的[文件]>[选项]设置中,[高级]才是最多选项设置的地方: 张同学亦如是说. 比如一个比 ...

  10. CF152A Marks 题解

    Content 有 \(n\) 名学生考了 \(m\) 门科目,各得到了自己的成绩单.如果第 \(i\) 个学生的第 \(j\) 个科目的分数 \(a_{i,j}\) 在所有学生中是最高的,那么我们就 ...