我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python-继承

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python-继承

  • 单继承

  • 多继承

面向对象三大特性

  • 封装根据职责属性方法封装到一个抽象的

  • 继承实现代码的重用,相同的代码不需要重复的缩写

  • 多态不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度

1.单继承

1.1继承的概念、语法和特点

继承的概念:子类拥有父类的所有方法属性

1.1.1继承的语法

class 类名(父类名):    pass
  • 子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发

  • 子类中应该根据职责,封装子类特有属性方法

1.1.2专业术语

Dog类是Animal类的子类,Animal类是Dog类的父类,Dog类从Animal类继承

Dog类是Animal类的派生类,Animal类是Dog类的基类,Dog类从Animal类派生

1.1.3继承的传递性

  • C类从B类继承,B类又从A类继承

  • 那么C类就具有B类和A类的所有属性方法

子类拥有父类以及父类的父类中封装的所有属性方法

class Animal:    def eat(self):        print("吃---")    def drink(self):        print("喝---")    def run(self):        print("跑---")    def sleep(self):        print("睡---")class Dog(Animal):    def bark(self):        print("汪汪叫")class XiaoTianQuan(Dog):    def fly(self):        print("我会飞")# 创建一个哮天犬xtq = XiaoTianQuan()xtq.fly()xtq.bark()xtq.eat()

提问

哮天犬能够调用Cat类中定义的catch方法吗?

答案

不能,因为哮天犬Cat之间没有继承关系

1.2方法的重写

  • 子类拥有父类的所有方法属性

  • 子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发

应用场景

  • 当父类的方法实现不能满足子类需求时,可以对方法进行重写(override)

注意:哮天犬与普通狗的叫法不一样

重写 父类方法有两种情况:

  • 覆盖父类的方法

  • 对父类方法进行扩展

1.2.1覆盖子类的方法

  • 如果在开发中,父类的方法实现子类的方法实现完全不同,就可以使用覆盖的方式,在子类中重新编写父类的方法实现

具体的实现方式,就相当于在子类中定义了一个和父类同名的方法并且实现重写之后,在运行时,只会调用子类中重写的方法,而不再会调用父类封装的方法。

class Animal:    def eat(self):        print("吃---")    def drink(self):        print("喝---")    def run(self):        print("跑---")    def sleep(self):        print("睡---")class Dog(Animal):    def bark(self):        print("汪汪叫")class XiaoTianQuan(Dog):    def fly(self):        print("我会飞")    def bark(self):        print("叫得跟神一样...")xtq = XiaoTianQuan()# 如果子类中,重写了父类的方法# 在使用子类对象调用方法时,会调用子类中重写的方法xtq.bark()

1.2.2对父类方法进行扩展

  • 如果在开发中,子类的方法实现包含父类的方法实现

  • 父类原本封装的方法实现是子类方法的一部分

  • 就可以使用扩展的方式

  • 在子类中重写父类的方法

  • 在需要的位置使用super().父类方法来调用父类方法的执行

  • 代码其它的位置针对子类的需求,编写子类特有的代码实现

关于super

  • pythonsuper是一个特殊的类

  • super()就是使用super类创建出来的对象

  • 最常使用的场景就是在重写父类方法时,调用在父类中封装的方法实现

class Animal:    def eat(self):        print("吃---")    def drink(self):        print("喝---")    def run(self):        print("跑---")    def sleep(self):        print("睡---")class Dog(Animal):    def bark(self):        print("汪汪叫")class XiaoTianQuan(Dog):    def fly(self):        print("我会飞")    def bark(self):        # 1.针对子类特有的需求,编写代码        print("神一样的叫...")        # 2.使用super().调用原本在父类中封装的方法        super().bark()        # 3. 增加其他子类的代码        print("$%#&")xtq = XiaoTianQuan()# 如果子类中,重写了父类的方法# 在使用子类对象调用方法时,会调用子类中重写的方法xtq.bark()

1.3父类的私有属性和私有方法

子类对象不能在自己的方法内部,直接访问父类的私有属性私有方法

子类对象可以通过父类公有方法间接访问到私有属性私有方法

  • 私有属性、方法是对象的隐私,不对外公开,外界以及子类都不能直接访问

  • 私有属性、方法通常用于做一些内部的事情

示例

  • B的对象不能直接访问__num2属性

  • B的对象不能在demo方法内部访问__num2属性

  • B的对象可以在demo方法内,调用父类的test方法

  • 父类的test方法内部,能够访问__num2属性和__test方法

2.多继承

概念

  • 子类可以拥有多个父类,并且具有所有父类属性方法

  • 例如:孩子会继承自己父亲母亲特性

语法

class 子类名(父类名1, 父类名2...)    pass
class A:    def test(self):        print("test 方法")class B:    def demo(self):        print("demo 方法")class C(A, B):    # 多继承可以让子类对象,同时具有多个父类的属性和方法     pass# 创建子类对象c = C()c.test()c.demo()

2.1多继承的使用注意事项

问题的提出

  • 如果不同的父类中存在同名的方法子类对象在调用方法时,会调用哪一个父类中的方法呢?

提示:开发时应该尽量避免这种容易产生混淆的情况!--如果父类之间存在同名的属性或者方法,应该尽量避免使用多继承

python中的MRO--方法搜索顺序

  • python中针对类提供了一个内置属性__mro__可以查看方法搜索顺序

  • MRO是method resolution order, 主要用于在多继承时判断方法、属性的调用路径

class A:    def test(self):        print("A --- test 方法")    def demo(self):        print("A --- demo 方法")class B:    def test(self):        print("B --- test 方法")    def demo(self):        print("B --- demo 方法")class C(B, A):    # 多继承可以让子类对象,同时具有多个父类的属性和方法     pass# 创建子类对象c = C()c.test()c.demo()# 确定C类对象调用方法的顺序print(C.__mro__)

输出结果

(, , , )
  • 在搜索方法时,是按照__mro__的输出结果从左至右的顺序查找的

  • 如果在当前类中找到方法,就直接执行,不再搜索

  • 如果没有找到,就查找下一个类中是否有对应的方法,如果找到,就直接执行,不再搜索

  • 如果找到最后一个类,还没有找到方法,程序报错

2.2新式类与旧式(经典)类

objectpython为所有对象提供的基类,提供有一些内置的属性和方法,可以使用dir函数查看

  • 新式类:以object为基类的类,推荐使用

  • 经典类:不以object为基类的类,不推荐使用

  • 在python3.x中定义类时,如果没有指定父类,会默认使用object作为该类的基类--python3.x中定义的类都是新式类

  • 在python2.x中定义类时,如果没有指定父类,则不以object作为基类

新式类和经典类在多继承时--会影响到方法的搜索顺序

为了保证编写的代码能够同时python2.x和python3.x运行!

今后在定义类时,如果没有父类,建议统一继承自object

class 类名(object):    pass

代码见:https://github.com/x45w/python_jicheng.git

内容总结于:https://space.bilibili.com/37974444

来源地址:https://blog.csdn.net/aaaccc444/article/details/128748970

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python-继承

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python 继承与多重继承

当然,如果不支持python继承,语言特性就不值得称为“类”。派生类定义的语法如下所示: . . . 名称 BaseClassName 必须定义于包含派生类
2023-01-31

python 继承

面向对象中的继承关系        1. 经典类            py2: 不继承任何类 2. 新式类            py2: 手动继承object            py3: 所有的类都是object的子类经典类的MRO
2023-01-30
2023-10-27

Python类中的单继承和多继承用法

本篇内容主要讲解“Python类中的单继承和多继承用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python类中的单继承和多继承用法”吧!前言Python面向对象编程语言,有List、Str
2023-06-02

python——多重继承

#方式一class A():    def __init__(self, name):        self.name = name        print("a class ...")class B():    def __init_
2023-01-31

python类的继承

面向对象的三大特性:封装、继承、多态继承时面向对象编程的优点之一类的继承与方法重载:继承的特点:减少代码和灵活定制新类子类具有父类的属性和方法子类不能继承父类的私有属性/方法子类可以添加新的方法子类可以修改父类的方法继承的语法:定义类时,在
2023-01-31

python中的多继承

python和C++一样,支持多继承。概念虽然容易,但是困难的工作是如果子类调用一个自身没有定义的属性,它是按照何种顺序去到父类寻找呢,尤其是众多父类中有多个都包含该同名属性。class P1 #(object):    def foo(s
2023-01-31

Python super(钻石继承)

1.   Python的继承以及调用父类成员python子类调用父类成员有2种方法,分别是普通方法和super方法假设Base是基类class Base(object):   def __init__(self):    
2023-01-31

怎么在python中定义单继承和多继承

本篇文章为大家展示了怎么在python中定义单继承和多继承,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python的数据类型有哪些?python的数据类型:1. 数字类型,包括int(整型)、lo
2023-06-14

Python面向对象——继承

#coding:utf-8"""术语:1、在python3中,自定义创建的类都默认继承了python类中名为object的类2、object类提供的方法,是双下划线开头的,是为了提供给python内部使用3、被继承的类叫做超类,或者叫做父类
2023-01-31

python 继承2个父类

#!/usr/bin/env pythonclass father(object): def __init__(self,tail,heav): self.tail=tail self.heav=heavclass mother(obje
2023-01-31

python记录day_20 多继承

多继承继承: x是一种y的时候.可以使用继承关系。是"is a"的关系在python中,支持多继承,一个类可以拥有多个父类。但是多继承中, 存在着这样一个问题,当两个父类中出现了重名方法的时候该怎么办呢? 这时就涉及到如何查找父类方法的问题
2023-01-30

day25-python之继承组合

1.上节回顾 1 class School: 2 x=1 3 def __init__(self,name,addr,type): 4 self.Name=name 5 self.Addr=a
2023-01-31

php是多继承还是单继承

php是单继承。php是不支持多继承的,但是php可以通过使用interface或者trait实现多继承,如【interface test1 {public function connect();}interface test2 ...】。
2016-11-13

Java继承

各位朋友们,大家好!今天我为大家分享的是Java上面一个很重要的知识点:继承,继承也被称为Java的灵魂之一。 文章目录 为什么要使用继承子类怎样继承父类在子类中如何访问父类的成员super关键字 当父类中有构造方法时this关
2023-08-17

python继承有什么好处

这篇文章主要讲解了“python继承有什么好处”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python继承有什么好处”吧!说明1、子类获得了父类的所有功能。因为Animial实现了run(
2023-06-20

Python的继承怎么使用

本篇内容介绍了“Python的继承怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!面向对象三大特性:封装 根据 职责 将 属性 和 方
2023-06-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录