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',那么就不会报错,而采取乱 ...
随机推荐
- 简单易用的leetcode开发测试工具(npm)
描述 最近在用es6解leetcode,当问题比较复杂时,有可能修正了新的错误,却影响了前面的流程.要用通用的测试工具,却又有杀鸡用牛刀的感觉,所以就写了个简单易用的leetcode开发测试工具,分享 ...
- 【剑指offer】Q16:翻转链表
def reverse(head): if head == None or head.next == None: return head psuhead = ListNode(-1) while he ...
- linux加大服务器文件描述符
最简单的说,在 unix/liux 里面,你的服务只要开启一个进程,就要占用文件描述符的.liunx 默认 是 1024,如果描述符少了,你的访问量多了,你的服务器支撑不了,所以要把描述符加大. #e ...
- more - 在显示器上阅读文件的过滤器
总览 (SYNOPSIS) more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file ... ] 描述 (DESCRIPTION) More 是 ...
- 在eclipse中添加和删除项目
一. 将JAVA文件夹导入Eclipse中的方法: 方法一:直接将java文件夹复制,然后粘贴到项目下: 方法二:(1)打开Eclipse,点击项目的空白处,现在import: (2)现在Existi ...
- k8s基本概念
1)Master模块简介: Master是Cluster的大脑,它的主要职责是调度,即决定将应用放在哪里运行.Master运行Linux操作系统,可以是物理机或者虚拟机.为了实现高可用,可以运 ...
- CF3D Least Cost Bracket Sequence(2500的实力贪心...
哎,昨天一直在赶课设..没有写 最近听了一些人的建议,停止高级算法的学习,开始刷cf. 目前打算就是白天懒得背电脑的话,系统刷一遍蓝书紫书白书之类的(一直没系统刷过),回宿舍再上机吧. https:/ ...
- python:图片拼接
一:尺寸相同的图片拼接 import os from PIL import Image width_i = 200 height_i = 200 row_max = 3 line_max = 3 al ...
- 【leetcode】1053. Previous Permutation With One Swap
题目如下: Given an array A of positive integers (not necessarily distinct), return the lexicographically ...
- 正则化的L1范数和L2范数
范数介绍:https://www.zhihu.com/question/20473040?utm_campaign=rss&utm_medium=rss&utm_source=rss& ...