Python笔记(十九)_继承
继承
继承可以把父类的所有功能都直接拿过来,这样就不必从零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写
多重继承
通过多重继承,一个子类就可以同时获得多个父类的所有功能
>>>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笔记(十九)_继承的更多相关文章
- Python笔记(十八)_私有属性、实例属性、类属性
私有属性 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,就变成了一个私有属性,只有内部可以访问,外部不能直接访问或修改. 这样就确保了外部代码不能随意修改对象内部的状态,这样通过 ...
- Python爬虫(十九)_动态HTML介绍
JavaScript JavaScript是网络上最常用也是支持者对多的客户端脚本语言.它可以收集用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页游戏. 我们可以在网页源 ...
- [b0034] python 归纳 (十九)_线程同步_条件变量
代码: # -*- coding: utf-8 -*- """ 学习线程同步,使用条件变量 逻辑: 生产消费者模型 一个有3个大小的产品库,一个生产者负责生产,一个消费者 ...
- Python笔记(十五)_异常处理
try-except语句 try: 被检测代码 except Exception [as reason]: 出现异常后的处理代码 例: try: sum = 1+' f=open('未定义文件.txt ...
- Python笔记(十四)_永久存储pickle
pickle模块:将所有的Python对象转换成二进制文件存放 应用场景:编程时最好将大对象(列表.字典.集合等)用pickle写成永久数据包供程序调用,而不是直接写入程序 写入过程:将list转换为 ...
- Python笔记(十二)_文件
文件的打开模式 'r':以只读的方式打开文件(默认) 'w':以写入的方式打开文件,会覆盖已存在的文件 'x':用写入的方式打开文件,如果文件已存在,会抛出异常 'a':用写入的方式打开文件,如果文件 ...
- python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法
python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法 同一台机器同时安装 python2.7 和 python3.4不会冲突.安装在不同目录,然 ...
- python第二十九课——文件读写(复制文件)
自定义函数:实现文件复制操作有形参(2个) 没有返回值相似版(不用) def copyFile(src,dest): #1.打开两个文件:1个关联读操作,1个关联写操作 fr=open(src,'rb ...
- python第二十九课——文件读写(读取读取中文字符)
演示:读取中文字符 结论: 1).如果不设置encoding,默认使用gbk进行编解码 2).如果编码和解码不一致,最终导致报错,但是一旦设置了errors='ingore',那么就不会报错,而采取乱 ...
随机推荐
- 数组去重,排序,重复次数,两个数组合并,两个数组去重,map(),filter(),reduce()
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- mysql-介绍、下载安装以及软件基本管理
一.mysql介绍 mysql是一个关系型数据库管理系统,它是一个基于socket编写的C/S架构的软件. 客户端软件: mysql自带:如mysql命令,mysqldump命令等. python模块 ...
- 攻防世界--re-for-50-plz-50
RetDec是真的难安装,太笨了~~~ 1.准备 获取信息 32位文件 2.IDA打开 发现这是MIPS代码.本来准备安装RetDec,哎...还是恶补MIPS指令知识吧:https://www.cn ...
- JVM内存模型及参数调优
堆.栈.方法区概念区别 1.堆 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.根据垃圾回收机制的不同, Java堆有可能拥有不同的结构,最为常见的就是 ...
- python 中PIL.Image和OpenCV图像格式相互转换
PIL.Image转换成OpenCV格式: import cv2 from PIL import Image import numpy image = Image.open("plane ...
- 10.Linux-CentOS系统重启之后Xshell无法SSH连接(云环境)
问题:云环境下CentOS系统断电或强制关机,再开机出现问题:Entering emergency mode. Exit the shell to continue. Generating " ...
- python基础内置函数
#取绝对值 #print(abs(-1)) #对序列中的元素进行bool运算,如果可迭代对象为空也返回True # print(all((1,23,))) # print(all({"nam ...
- uiautomatorviewer不能直接截取手机屏幕信息
本身可以用sdk——>tools里自带的ui automator viewer截取如果截取不了,采用以下方法: 新建一个文本文档,名字自己起如uni.bat(注意把后缀给改成.bat) adb ...
- java并发学习--第二章 spring boot实现线程的创建
除了之前介绍的创建线程方式外,spring boot为我们了提供一套完整的线程创建方式,其中包括了:线程.线程池.线程的监控. 一.使用spring boot提供的方法创建线程与线程池 1.首先在sp ...
- nginx-博客阅读笔记记录-20190916
Nginx 入门学习教程 Ng官网解释: nginx [engine x]是最初由Igor Sysoev编写的HTTP和反向代理服务器,邮件代理服务器和通用TCP / UDP代理服务器. 维基百科解释 ...