【Python零基础入门篇 · 16】:类的继承(单继承和多继承)、继承重写、面向对象的多态、静态方法和类方法

简介: 【Python零基础入门篇 · 16】:类的继承(单继承和多继承)、继承重写、面向对象的多态、静态方法和类方法

一、类的继承(单继承和多继承)


继承是一种类间关系,描述一个类从另一个类中获取成员信息的类间关系。


继承必定发生在两个类之间,参与继承关系的双方成员是父类子类




1、语法:class 类名(父类名)


子类可以继承父类的所有属性和方法,就算自己没有,也可以使用父类的。

2dfcfdfc7fc94fb8aad97fdeaf0cbb49.png


继承的传递性:3d0306877631436c835e4495fa74e141.png


2、继承的分类

单继承子类只继承一个父类


多继承有两个父类的属性和方法,如果两个父类具有同名的方法的时候,调用就近原则


多继承:


定义格式:     class 类名 (父类名1,父类名2,...):  


           pass2768b11de6f545b8910226f19ad9792d.png


查看方法搜索顺序:


python中内置属性__mro__,可以查看方法搜索顺序,确定子类调用的方法顺序。

c3359b6509974285b3d344b25484df9b.png


3、总结


  • 多继承有同名方法时,在搜索方法时,会先按照mro的输出结果,从左往右的顺序查找


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


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




二、继承重写


如果从父类继承的方法不能满足子类的需求,可以在子类中重写父类的方法,这个过程称为方法的覆盖),也称为方法的重写。


1、覆盖父类的方法


在子类中定义一个跟父类同名的方法,会调用子类重写的方法。


733ab82a4e3d43c6b41c039960c29de7.png


2、在父类的方法后增加新的内容


  • 第一种:父类.方法名(self)


ab8c98b4a3c148f5a6d1e9e5e537c390.png



  • 第二种:super().方法名() (常用)


python中super是一种特殊的类,super()是使用super类创建出来的对象,可以去调用父类中的方法。

fbf42aa0a9b64ab8a87ea63bc7865b70.png


3、类的新式写法


  • 类的三种写法

class 类名:


class 类名():


class 类名(object):      ——>(新式写法)

以上三种写法并无区别,推荐使用新式写法,其中object是python中为所有对象提供的基类,里面提供了一些内置的属性和方法。



三、面向对象的多态


多态特征一个对象具有多种形态, 在不同的使用环境中以不同的形态展示其功能, 那么我们就称该对象具有多态特征。     


  • 多态发生在具有继承关系的基础之上。


  • 多态不关注对象的类型,只关注对象具有的行为


  • 不同的子类对象,调用相同的父类方法,就会有不同的结果。


例如:“+”号,不同的对象使用,就会有不同的结果

2f7040929de14b178d8c476a13b1eed6.png


1、第一种多态展示

b6909dfac70a4fa4964991ce55a0bf73.png


2、第二种多态展示


定义统一接线口,一个接口,多种实现


0195e93063a44de1aff9fb9145efa884.png


四、静态方法和类方法


1、静态方法


  • 使用装饰器:@staticmethod


定义格式 

class 类名:            

               @staticmethod            

                def 方法名(形参):                  

                       方法体


调用格式:        


类名.方法名(实参)    

   

对象名.方法名(实参)


b1b52e2988e94c17bf900e2a6e1aa5a4.png


2、类方法


类方法:针对类对象定义的方法


注意!!!类方法内部可以直接访问类属性,或者调用其他类方法。


定义格式


class 类名:      

   

       @classmethod    

   

       def 方法名(形参):    

           

               方法体



调用格式:      

 

类名.方法名(实参)  

     

对象名.方法名(实参)  不常用


  • 例1:在实例方法中访问类属性


8283a368a7754a05bc0f1c4b84f09546.png


  • 例2:在类方法中访问类属性


a24bfc70df1c416fa87e88564c0c6fc7.png


在类方法中访问不了实例属性,会报错

a7cddb46bdef47f993f0f39664eb924b.png


3、总结


  • 实例方法:方法内部访问实例属性,方法内部可以通过类名、类属性名来访问类属性


  • 静态方法:方法内部不需要访问实例属性和类属性


  • 类方法:方法内部只需要访问类属性
相关文章
|
1月前
|
Python
你真的会面向对象吗!解密Python“魔术方法”
你真的会面向对象吗!解密Python“魔术方法”
22 0
|
1月前
|
算法 Python
python多继承的3C算法是什么?怎么用?
有很多地方都说python多继承的继承顺序,是按照深度遍历的方式,其实python多继承顺序的算法,不是严格意义上的深度遍历,而是基于深度遍历基础上优化出一种叫3C算法
|
1月前
|
安全 算法 Go
Python面向对象的三大特性
python面向对象编程(OOP)的三大特性是封装、继承和多态。这些特性共同构成了OOP的基础,使得软件设计更加灵活、可维护和可扩展。
20 3
|
25天前
|
算法 Python
Python 中的继承:强大的代码复用机制
【8月更文挑战第23天】
33 0
|
27天前
|
安全 Python
九:《Python基础语法汇总》— 面向对象
本篇文章讲解了何为类何为对象,以及魔法方法(具有特殊功能的函数)和面向对象编程的三个特性:封装;继承;多态
11 0
|
2月前
|
数据采集 Java C语言
Python面向对象的高级动态可解释型脚本语言简介
Python是一种面向对象的高级动态可解释型脚本语言。
23 3
|
3天前
|
Python
Python编程中的异常处理:理解与实践
【9月更文挑战第14天】在编码的世界里,错误是不可避免的。它们就像路上的绊脚石,让我们的程序跌跌撞撞。但是,如果我们能够预见并优雅地处理这些错误,我们的程序就能像芭蕾舞者一样,即使在跌倒的边缘,也能轻盈地起舞。本文将带你深入了解Python中的异常处理机制,让你的代码在面对意外时,依然能保持优雅和从容。
138 73
|
3天前
|
人工智能 数据挖掘 数据处理
揭秘Python编程之美:从基础到进阶的代码实践之旅
【9月更文挑战第14天】本文将带领读者深入探索Python编程语言的魅力所在。通过简明扼要的示例,我们将揭示Python如何简化复杂问题,提升编程效率。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往高效编码世界的大门。让我们开始这段充满智慧和乐趣的Python编程之旅吧!
|
2天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从零基础到实战应用
【9月更文挑战第15天】本文将引导读者从零开始学习Python编程,通过简单易懂的语言和实例,帮助初学者掌握Python的基本语法和常用库,最终实现一个简单的实战项目。文章结构清晰,分为基础知识、进阶技巧和实战应用三个部分,逐步深入,让读者在学习过程中不断积累经验,提高编程能力。
|
3天前
|
机器学习/深度学习 数据采集 人工智能
探索Python的奥秘:从基础到进阶的编程之旅
在这篇文章中,我们将深入探讨Python编程的基础知识和进阶技巧。通过清晰的解释和实用的示例,无论您是编程新手还是有经验的开发者,都能从中获得有价值的见解。我们将覆盖从变量、数据类型到类和对象的各个方面,助您在编程世界里游刃有余。
21 10