一、继承
1.单继承
  • 一个对象使用另一个对象的属性和方法,被继承的类也称父类

(1)父类与子类的方法不一样

class Four():
def sub(self,x,y):
return x + y class Five(Four): #Five类继承了Four类 --> Five 类拥有了 Four 类下的所有函数方法
def reduce(self,a,b):
return a - b print (Five().sub(2,5)) #结果如下
7

(2)子类拥有与父类相同的方法

  • 当子类拥有与父类相同的方法,通过子类实例调用该方法后,执行的是子类下的方法
class Mother():
def name(self):
print("This is my mother!") class MySelf(Mother):
#对父类方法重写
def name(self):
print("My name is XiaoMing") M = MySelf()
M.name() #结果如下
My name is XiaoMing

(3)子类拥有与父类相同的方法和属性

class Teacher():
#在父类中定义属性
def __init__(self,name):
self.name = name
def Name(self):
print("My teacher name is {} !".format(self.name)) class MySelf(Teacher):
#对父类方法重写
def Name(self):
print("My name is {} !".format(self.name)) M = MySelf("XiaoWang")
M.Name() #结果如下
My name is XiaoWang !
"""
在子类中使用了 super() 函数调用父类方法(常用于多继承)
"""
class Teacher():
#在父类中定义属性
def __init__(self,name):
self.name = name
def Name(self):
print("My teacher name is {} !".format(self.name)) class MySelf(Teacher):
def __init__(self,course,name):
super(MySelf, self).__init__(name)
self.course = course
#对父类方法重写
def Name(self):
print("My name is {} !".format(self.name))
def Course(self):
print("我的{}课老师的名字是{}".format(self.course,self.name)) M = MySelf("数学","Bob")
M.Name()
M.Course() #结果如下
My name is Bob !
我的数学课老师的名字是Bob

2.多继承

  • 多重继承就是一个子类继承多个父类
class Mother():
def hobby(self):
print("Mother love shopping!") class Father():
def work(self):
print("Father work is Test Engineer") class Myself(Father,Mother):
pass M = Myself()
M.work()
M.hobby() #结果如下
Father work is Test Engineer
Mother love shopping!
class Mother():
def __init__(self,something):
self.something = something def Hobby(self):
print("Mother love {}!".format(self.something)) class Father():
def __init__(self,work):
self.work = work def Work(self):
print("Father work is {}".format(self.work)) class Myself(Father,Mother):
def __init__(self,work,something):
# 注意:对于多继承来说,使用 super() 只会调用第一个父类的属性方法
# 要想调用特定父类的构造器只能使用 "父类名.__init__(self)" 方式。如下:
Father.__init__(self, work)
Mother.__init__(self,something) M = Myself("test", "shopping")
M.Work()
M.Hobby()
#我们可以用mro来查看顺序
print(Myself.mro()) #结果如下
Father work is test
Mother love shopping!
[<class '__main__.Myself'>, <class '__main__.Father'>, <class '__main__.Mother'>, <class 'object'>]
  • 如果不同的两个父类出现了相同名称的属性或者方法,子类会继承谁的属性或者方法?
class Mother():
def __init__(self,work):
self.work = work
def hobby(self):
print("My mother work is {}.".format(self.work)) class Father():
def __init__(self,work):
self.work = work def hobby(self):
print("My father work is {}.".format(self.work)) class Myself(Father,Mother):
pass M = Myself("Test")
M.hobby() #结果如下
My father work is Test.
#由上面实例可知如下

(1)python3中都是新式类:广度优先,从父类中查询对应的方法,查询到第一个满足的方法之后就直接返回
object
|
A(object)
|
A_1(A) --> A_2(A)
|
Test(A_1, A_2) (2)python2中的经典类:深度优先
A
|
A --> A_2(A)
|
A_1(A)
|
Test(A_1, A_2)

python(类继承)的更多相关文章

  1. python 类继承演示范例的代码

    把做工程过程重要的代码片段备份一次,下面的资料是关于python 类继承演示范例的代码. # a simple example of a class inheritance # tested with ...

  2. python类继承

    面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过 继承 机制.继承完全可以理解成类之间的 类型和子类型 关系. 假设你想要写一个程序来记录学校之中的教师和学生情况.他们有一些 ...

  3. Python 类继承,__bases__, __mro__, super

    Python是面向对象的编程语言,也支持类继承. >>> class Base: ... pass ... >>> class Derived(Base): ... ...

  4. Python类继承(转发)

    目录 一.概述 二.类的继承 2.1 继承的定义 2.2 构造函数的继承 2.3 子类对父类方法的重写 三.类继承的事例 回到顶部 一.概述 面向对象编程 (OOP) 语言的一个主要功能就是“继承”. ...

  5. 第7.7节 案例详解:Python类继承机制

    本节实现一个类继承的小程序,下面一边结合代码一边介绍相关继承的知识.例子以车.汽车为例,车为父类.汽车为子类. 一.    定义父类Vehicle class Vehicle():    def __ ...

  6. python 类 - 继承

    继承 什么是继承? 编写类时,并非总要从空白开始.如果要编写的类是另一个现成类的特殊版本,可使用继承. 一个类继承另一个类时,将自动获得另一个类的所有属性和方法.现有的类称为父类,而新类称为子类. 子 ...

  7. python类继承的重写和super

    给已经存在的类添加新的行为,继承是非常好的实现方式.但是如果要改变行为呢?比如在Python继承扩展内置类,我们的contact类只允许一个名字和一个邮箱,但是如果要对某些人增加电话号码呢?这里可以通 ...

  8. python 类继承与子类实例初始化

    From: https://blog.csdn.net/cs0301lm/article/details/6002504?utm_source=blogxgwz4 [ 先贴参考书籍原文(中文英文对照) ...

  9. python 类继承

    #!/usr/bin/python # Filename: inherit.py class SchoolMember: '''Represents any school member.''' def ...

  10. Python类继承,方法重写及私有方法

    # -*- coding: utf-8 -*- """ Created on Mon Nov 12 15:05:20 2018 @author: zhen "& ...

随机推荐

  1. Android 图片裁剪库 uCrop

    引语 晚上好,我是猫咪,我的公众号「程序媛猫咪」会推荐 GitHub 上好玩的项目,挖掘开源的价值,欢迎关注我. 现在 Android 开发,离不开图片,必然也需要图片裁剪功能,这个实现可以调用系统的 ...

  2. NHibernate COUNT(*) 统计问题

    NHibernate这个框架用了有一年多了,相对有很大的优势,可以省去很多写Sql的时间. 但是如果你想用它做统计,那么有点抱歉,只能手动写写了.它内置的东西很难符合你的需求. 我遇到的问题是这样的. ...

  3. SpringBoot系列(六)集成thymeleaf详解版

    SpringBoot系列(六)集成thymeleaf详解版 1. thymeleaf简介  1. Thymeleaf是适用于Web和独立环境的现代服务器端Java模板引擎.  2. Thymeleaf ...

  4. vue 全局自定义组件

    1.vue文件 <template> <div style="position: absolute;bottom: 10px;text-align: center;widt ...

  5. syncronized如何上锁

    上锁,根据操作系统所说的原则,对共享变量上锁,对临界区上锁.谁访问临界资源?就给谁上锁 同步监视器,它上锁的对象. 1.用关键字给方法上锁 2.用synchronized代码块上锁 默认上锁对象:th ...

  6. Linux下搭建接口自动化测试平台

    前言 我们今天来学习一下在Linux下如何搭建基于HttpRunner开发的接口自动化测试平台吧! 需要在Linux上提前准备的环境(下面是本人搭建时的环境): 1,Python 3.6.8 (可参考 ...

  7. webWMS开发过程记录(三)- 需求分析(略)

    行业:汽车零部件制造 大方向:非唯一码,需有一套简单.易用.受控的误操作撤回机制 现状(略) 目标(略) 注:由于项目是自己根据以往经验,自己开发的,且开发时间不固定,故需求分析暂略,我会把工作重点放 ...

  8. Hash记录字符串

    Hash记录字符串模板: mod常常取1e9+7,base常常取299,,127等等等....有的题目会卡Hash,因为可能会有两个不同的Hash但却有相通的Hash值...这个时候可以用双Hash来 ...

  9. 带权值的图 BFS

    用bfs遍历最图求最短路径时通常借用优先队列即优先考虑最大的或者最小的权值 方法1 优先队列:(内置函数,优先考虑较小的权值) #include<iostream> #include< ...

  10. Mac os Pycharm 中使用Stanza进行实体识别(自然语言处理nlp)

    stanza 是斯坦福开源Python版nlp库,对自然语言处理有好大的提升,具体好在哪里,官网里面都有介绍,这里就不翻译了.下面放上对应的官网和仓库地址. stanza 官网地址:点击我进入 sta ...