继承

继承可以把父类的所有功能都直接拿过来,这样就不必从零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写

多重继承

通过多重继承,一个子类就可以同时获得多个父类的所有功能

>>>class A():
  def __init__(self):
print("进入A…")
print("离开A…")
>>>class C(A):
def __init__(self):
print("进入C…")
super().__init__()
print("离开C…")
>>>class B(A):
def __init__(self):
print("进入B…")
super().__init__()
print("离开B…")
>>>class D(C, B):
def __init__(self):
print("进入D…")
super().__init__()
print("离开D…")

注意:多重继承容易导致重复调用的问题

如果两个父类方法名同,默认调用的是子类在括号中排前面的父类的方法

对父类方法重写

如果你的父类方法的功能不能满足你的需求,你可以在子类追加方法或者重写你父类的方法

子类未重写 __init__,实例化子类时,会自动调用父类定义的 __init__方法

子类如果重写了__init__ 时,实例化子类时会覆盖父类的__init__方法

当子类和父类都存在相同的A方法时,我们说子类A的覆盖了父类的A,在代码运行的时候,只会调用子类的A

调用被覆盖的父类方法

1.调用未绑定的父类方法

>>>class Fish:
def __init__(self):
self.x = r.randint(0,10)
def move(self):
print('位置是%s' % self.x)
>>>class Shark(Fish):
def __init__(self): #对父类__init__方法的重写
Fish.__init__(self) #调用父类的方法,并要写入所有的父类名称,如有n个父类,则要写n行调用代码,还容易在多继承中造成钻石继承的问题
self.hungry = True
def eat(self):
if self.hungry:
print('吃饱啦')
>>>shark = Shark()

在Fish.__init__(self)中的self实际上指的是子类的实例化对象,所以还有另一种方法,在不修改代码的情况下直接调用Fish.__init__(shark)

2.使用super函数(推荐使用)

super()函数的优点在于不需要给出任何基类的名字,它会自动找出所有基类以及对应的方法

>>>class Fish:
def __init__(self):
self.x = r.randint(0,10)
def move(self):
print('位置是%s' % self.x)
>>>class Shark(Fish):
def __init__(self): #对父类__init__方法的重写
super().__init__() #调用父类的方法,并不用给定每层父类名称,只需写一行代码
self.hungry = True
def eat(self):
if self.hungry:
print('吃饱啦')
>>>shark = Shark()

Python笔记(十九)_继承的更多相关文章

  1. Python笔记(十八)_私有属性、实例属性、类属性

    私有属性 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,就变成了一个私有属性,只有内部可以访问,外部不能直接访问或修改. 这样就确保了外部代码不能随意修改对象内部的状态,这样通过 ...

  2. Python爬虫(十九)_动态HTML介绍

    JavaScript JavaScript是网络上最常用也是支持者对多的客户端脚本语言.它可以收集用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页游戏. 我们可以在网页源 ...

  3. [b0034] python 归纳 (十九)_线程同步_条件变量

    代码: # -*- coding: utf-8 -*- """ 学习线程同步,使用条件变量 逻辑: 生产消费者模型 一个有3个大小的产品库,一个生产者负责生产,一个消费者 ...

  4. Python笔记(十五)_异常处理

    try-except语句 try: 被检测代码 except Exception [as reason]: 出现异常后的处理代码 例: try: sum = 1+' f=open('未定义文件.txt ...

  5. Python笔记(十四)_永久存储pickle

    pickle模块:将所有的Python对象转换成二进制文件存放 应用场景:编程时最好将大对象(列表.字典.集合等)用pickle写成永久数据包供程序调用,而不是直接写入程序 写入过程:将list转换为 ...

  6. Python笔记(十二)_文件

    文件的打开模式 'r':以只读的方式打开文件(默认) 'w':以写入的方式打开文件,会覆盖已存在的文件 'x':用写入的方式打开文件,如果文件已存在,会抛出异常 'a':用写入的方式打开文件,如果文件 ...

  7. python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法

    python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法 同一台机器同时安装 python2.7 和 python3.4不会冲突.安装在不同目录,然 ...

  8. python第二十九课——文件读写(复制文件)

    自定义函数:实现文件复制操作有形参(2个) 没有返回值相似版(不用) def copyFile(src,dest): #1.打开两个文件:1个关联读操作,1个关联写操作 fr=open(src,'rb ...

  9. python第二十九课——文件读写(读取读取中文字符)

    演示:读取中文字符 结论: 1).如果不设置encoding,默认使用gbk进行编解码 2).如果编码和解码不一致,最终导致报错,但是一旦设置了errors='ingore',那么就不会报错,而采取乱 ...

随机推荐

  1. S5PV210刷机

    一. 刷机初识 1.1. 什么是刷机 a. 刷机就是通过各种手段把相应镜像烧录到设备中,让设备可以运行起来.常见的刷机如:安卓刷机,QT刷机 1.2. S5PV210刷机镜像 1.2.1. 刷安卓所需 ...

  2. 第7章 PTA查找练习题

    这道题与第7章查找有关,当时提前看到,翻到书里面的算法,然后打进去,虽然是正确的,但是那时候并不知道二叉排序树的基础知识,包括插入查找的来龙去脉,现在已经学到了,有了一定了解,发现题目只用到了其中部分 ...

  3. 0基础入门 docker 部署 各种 Prometheus 案例 - 程序员学点xx 总集篇

    目录 大家好, 学点xx 系列也推出一段时间了.虽然 yann 能力有限,但还是收到了很多鼓励与赞赏.对这个系列 yann 还是很喜欢的,特别是 Prometheus 篇,在期间经历公众号 100 篇 ...

  4. Linux 使用ansible配置集群间互信

    安装pip $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载安装脚本 $ sudo python get-pip.py # ...

  5. slot-scope 插槽 的使用 ——'<template slot-scope="page">'

    slot-scope="page"slot-scope 是一个插槽,拿外面的数据,可以获取当前一行的数据page.row.pageId 拿到当前行数据的pageId注意:slot- ...

  6. Nodejs 学习笔记 --- 安装与环境配置

    一.安装Node.js步骤 1.下载对应自己系统对应的 Node.js 版本,地址:https://nodejs.org/zh-cn/      2.选安装目录进行安装      3.环境配置    ...

  7. Python在线IDE | 谷歌Colaboratory云端IDE介绍

    目录 1. 推荐阅读 2. 本文地址 3. 按 4. 使用篇 6. 教学篇 1. 推荐阅读 Python基础入门一文通 | Python2 与Python3及VSCode下载和安装.PyCharm破解 ...

  8. Redis 复制原理及特性

    摘要 早期的RDBMS被设计为运行在单个CPU之上,读写操作都由经单个数据库实例完成,复制技术使得数据库的读写操作可以分散在运行于不同CPU之上的独立服务器上,Redis作为一个开源的.优秀的key- ...

  9. jquery 模态对话框传值,删除,新增表格行

    个人的练习代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  10. HTML5 中list 和datalist实例

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...