继承

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

多重继承

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

>>>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. Trie字典树详解

    今天上午省选字符串......只会KMP.连hash都不会的我被大佬虐惨了......于是我要发奋图强学习字符串,学习字符串当然就要从Trie树这种可爱的数据结构开始啦!!! 一.什么是Trie树?? ...

  2. Excel VBA 判断工作表是否为空或被使用过(比如设置过框线)

    IsEmpty 函数 返回 Boolean 值,指出变量是否已经初始化. [语法] IsEmpty(expression) 必要的 expression 参数是一个 Variant,包含一个数值或字符 ...

  3. 初学css list-style属性

    网上很多css布局中会看到这样的一句:list-style:none: 那么list-style到底什么意思?中文即:列表样式:无: 其实它是一个简写属性,包含了所有列表属性,具体包含list-sty ...

  4. 左侧点击后右侧添加tab标签栏以及内容

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  5. Mysql8- Public Key Retrieval is not allowed

    在使用 MySQL 8.0 时重启应用后提示 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public ...

  6. 23、前端知识点--webpack的使用详解

    Webpack 是当下最热门的前端资源模块化管理和打包工具. https://www.cnblogs.com/zhangruiqi/p/7656206.html

  7. 【记录】mybatis mapper.xml 基础

    <choose> <when test=""> //... </when> <otherwise> //... </other ...

  8. 一条sql引发的“血案”

    前几天有一个项目要上线,需要对表的一个字段进行扩充,项目经理让我准备脚本,于是我准备了如下的脚本: )); )); )); 结果上线的时候,ord_log1和ord_log2表中有30万数据,在执行的 ...

  9. powerdesigner数据库设计

    (1)创建物理数据模型 打开PowerDesigner,然后点击File-->New  Model然后选择如下图所示的物理数据模型(物理数据模型的名字自己起,然后选择自己所使用的数据库即可) ( ...

  10. 树莓派 msmtp和mutt 的安装和配置

    1,安装mutt sudo apt-get install mutt 2,安装msmtp sudo apt-get install msmtp 3,设置mutt /etc/Muttrc # 系统全局设 ...