返回顶部
首页 > 资讯 > 后端开发 > Python >(十)python之多态
  • 583
分享到

(十)python之多态

开发语言python 2023-09-02 18:09:56 583人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

一、面向对象三大特征 面向对象编程的三大特征:封装,集成,多态 封装:客官的事物封装成类(将数据和方法放在一个类中就构成了封装)继承:在python中一个类可以集成于另一个类也可以继承多个类,被继承的类叫父类(或者叫基类,base clas

一、面向对象三大特征

面向对象编程的三大特征:封装,集成,多态

  • 封装:客官的事物封装成类(将数据和方法放在一个类中就构成了封装)
  • 继承:在python中一个类可以集成于另一个类也可以继承多个类,被继承的类叫父类(或者叫基类,base class),继承的类叫子类
  • 多态(polymorphism):指的是一类事物有多种形态,一个抽象类有多个子类(因而多态的概念依赖于继承),不同的子类对象调用相同的方法,产生不同的执行结果,多态可以增加代码的灵活度

二、多继承(拓展)

(1)Demo类同时继承A类和B类,然后Demo类实例化一个对象d,这个对象d可以调用A类和B类里面的属性和方法。

class A:    a_attr1 = 100    def func_a(self):        print('------func_a--------')class B:    b_attr1 = 999    def func_b(self):        print('------func_b--------')class Demo(A, B):    passd = Demo()# 调用父类A的属性和方法print(d.a_attr1)d.func_a()# 调用父类B的属性和方法print(d.b_attr1)d.func_b()# 打印结果100------func_a--------999------func_b--------

(2) 如果继承了2个类,调用两个父类中同名的方法和属性会怎么取值呢?

答:就近原则,他先找括号里面左边这个类,左边这个类找到了就不会再去找右边这个类,左边的类如果找不到就去右边这个类找。

注意:如果demo这个类自己有这个方法,就不会再去父类里面找,如果demo这个类没有,才会去父类里面去找。

class A:    a_attr1 = 100    attr = 10    def func_a(self):        print('----funca——————')    def work(self):        print('----funca——work————')class B:    b_attr1 = 999    attr = 99999    def func_b(self):        print('----funcb——————')    def work(self):        print('----funcb——work————')class Demo(A, B):    passd = Demo()# 调用两个父类中同名的方法和属性print(d.attr)# 打印结果10

(3)只读属性(property) 

方法名上面加了@property之后,不再是方法名,而是属性名称

class B:    b_attr1 = 999    attr = 99999    def func_b(self):        print('----funcb——————')    def work(self):        print('----funcb——work————')class Demo(A, B):    def work(self):        print('demo---work')    @property  # 定义只读属性    def battr(self):        return B.attrd = Demo()# 只读属性print(d.battr)# 打印结果99999

(4)多继承的应用思想

"""定义一个api测试的用例类    1、用例数据处理    2、接口请求    3、响应数据提取    3、断言"""class HandleData:    passclass RequestApi:    passclass BaseTest(HandleData, RequestApi):    pass

三、多态

实现多态的步骤:

  • 1、定义一个父类(Base),实现某个方法(比如:run)
  • 2、定义多个子类,在子类中重写父类的方法(run),每个子类run方法实现不同的功能
  • 3、假设我们定义了一个函数,需要一个Base类型的对象的参数,那么调用函数的时候,传入Base类不同的子类对象,那么这个函数就会执行不同的功能,这就是多态的体现。

还是不懂多态是啥意思吗?没关系,我们上一段代码就明白了。

一个父类,他具有多个子类,不同的子类在调用相同的方法,执行的时候产生不同的形态,这个叫多态。

class Animal(object):    """动物类"""    def func(self):        print('动物发出了声音')class Cat(Animal):    """猫类"""    def func(self):        print('喵 喵 喵')class Dog(Animal):    """狗类"""    def func(self):        print('汪 汪 汪 ')class Hero:    def func(self):        print('这个是英雄类的方法,不是动物类的对象')def work01(musen: Animal):    musen.func()work01(Hero())

多态的意义:

  • 对于一个变量,我们只需要知道他是Animal类型,无需确切地知道它的子类型,就可以放心地调用run()方法(调用方只管调用,不管细节)
  • 当需要新增功能,只需要新增一个Animal的子类实现run()方法,就可以在原来的基础上进行功能扩展,这就是著名的“开放封闭”原则:​​​​​​​

“开放封闭”原则:

  • 对扩展开放:允许新增Animal子类
  • 对修改封闭:不需要修改依赖Animal类型的run()等函数

注意点:Python中函数的参数是没有类型限制的,所以多态在python中的体现并不是很严谨。多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。

class Animal(object):    """动物类"""    def func(self):        print('动物发出了声音')class Cat(Animal):    """猫类"""    def func(self):        print('喵 喵 喵')class Dog(Animal):    """狗类"""    def func(self):        print('汪 汪 汪 ')class Hero:    def func(self):        print('这个是英雄类的方法,不是动物类的对象')def work01(musen: Animal):    musen.func()work01(Hero())

四、鸭子类型

  • 鸭子类型概念:他并不要求严格的继承体系,关注的不是对象的类型本身,而是它是否具有要调用的方法(行为)
  • 鸭子类型在python中的案例:
    ​​​​​​​
    内置函数iter:参数可以是实现迭代协议(__iter__方法)的任何类型的对象。
    ​​​​​​​
""""""鸭子类型概念:它并不要求严格的继承体系,关注的不是对象的类型,而是它是否具有要调用的方法(行为)。鸭子类型在python中的案例:    内置函数iter:参数可以是实现迭代协议(`__iter__`方法)的任何类型的对象"""li = [11, 22, 33, 44]s = '1212124'class MyTest:    def __iter__(self):        return (i for i in range(10))    def __len__(self):        return 10li1 = iter(li)  # 内置函数iter将可迭代对象转换为迭代器,,本质上是调用对象的__iter__s1 = iter(s)  # 内置函数iter将可迭代对象转换为迭代器,,本质上是调用对象的__iter__m = MyTest()m1 = iter(m)# 内置函数len获取数据的长度,本质上是调用对象的__len__print(len(m))

来源地址:https://blog.csdn.net/Sean_0819/article/details/126124169

--结束END--

本文标题: (十)python之多态

本文链接: https://lsjlt.com/news/391217.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • (十)python之多态
    一、面向对象三大特征 面向对象编程的三大特征:封装,集成,多态 封装:客官的事物封装成类(将数据和方法放在一个类中就构成了封装)继承:在python中一个类可以集成于另一个类也可以继承多个类,被继承的类叫父类(或者叫基类,base clas...
    99+
    2023-09-02
    开发语言 python
  • python基础之多态
    目录多态案例演示总结多态 多态:顾名思义九四多种形态\状态,就是同一种行为对不同的子类[对象]有不同的行为表现 要想实现多态 必须有两个前提需要遵守: 1.必须存在一种继承关系,必...
    99+
    2024-04-02
  • python 面向对象之多态
    多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。那么,多态的...
    99+
    2023-01-30
    面向对象 多态 python
  • Java之多态
    多态 多态的实现条件重写重写的定义重写的例子方法重写的条件 多态思想动态绑定与静态绑定 作者简介: zoro-1,目前大一,正在学习Java,数据结构等 作者主页:zoro-1的主页 欢迎大家点赞 👍...
    99+
    2023-08-16
    java 开发语言 笔记
  • Python学习之旅(十)
    字符串格式化有2种方法:一是用“%”,二是用format。 转换标志:,默认右对齐,%后面加上“-”表示左对齐;“+”表示在转换值之前要加上正负号;“ ”(空白符)表示在正数前面保留空格;“0”表示转换值若位数不够用0填充。 最小字段宽...
    99+
    2023-01-30
    之旅 Python
  • python学习之【继承、封装、多态】
    #来评选你心中的TOP1编程语言# 前言 距离上篇文章 python学习之【类和对象】已有三个星期之久,这篇文章介绍 面向对象的三大特征——封装,继承,多态。 对于编程初学者来说,学习python应...
    99+
    2023-08-31
    python 学习 开发语言
  • SQL 基础之多表查询(十)
    JOINS 类型和它的语法Natural joins(自然连接):– NATURAL JOIN 子句– USING 子句– ON 子句自连接  非等值连接  Outer joi...
    99+
    2024-04-02
  • Python——多态
            Python作为一门面对对象的语言,那么肯定也是有多态这个属性的,这里主要跟C++的多态做一下类比        先看下面的代码                               这里可以看到,Child,Chil...
    99+
    2023-01-31
    多态 Python
  • Python学习之旅(十一)
    一、全局变量和局部变量 局部变量:在函数内定义的变量,在函数内使用 全局变量:在函数外定义的变量,在程序任何地方都可以使用 1、全局变量与局部变量同名 这时函数内部只调用局部变量,如果要调用全局变量需要在函数内加一句“global 同名...
    99+
    2023-01-30
    之旅 Python
  • python学习之旅(十五)
    一、装饰器 decorator:本质上就是函数,可以增强函数的功能。 定义起来虽然有点复杂,但使用起来非常灵活和方便 1、不修改被装饰函数的源代码 2、不修改被装饰函数的调用方式 3、装饰函数对被装饰函数透明 import funct...
    99+
    2023-01-30
    之旅 python 十五
  • Python学习之旅(十四)
    Python内置函数 1、abs:取绝对值 abs(-1) 1 2、all:把序列中的每一个元素拿出来做布尔运算,都为真则返回True,如果序列中有None、0、“”、[]、{}、()则返回False all([1,23,0]) ...
    99+
    2023-01-30
    之旅 Python 十四
  • python学习之旅(十六)
    1、可以把模块想象成导入Python以增强其功能的扩展 2、任何程序都可以作为模块导入 3、导入模块并不意味着在导入的时候执行某些操作,它们主要用于定义变量、函数和类等   #hello1.py def hello(): pr...
    99+
    2023-01-30
    之旅 python 十六
  • Python教程之Python多态的深层次理解
    前言: 多态的实现必须满足两个前提条件 1.继承:多态一定是发生在子类和父类之间 2.重写:多态子类重写了父类的方法 记住这两点再结合代码示例有助于理...
    99+
    2024-04-02
  • Python之升级pip(二十五)
    简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】Ƕ...
    99+
    2023-09-04
    python pip 开发语言
  • Python学习之旅(二十五)
    正则表达式:检查一个字符串是否与某个模式匹配 \d :匹配数字 \w :匹配字母或数字 . :匹配任意字符 {n} :匹配n个字符 {m,n} :匹配m到n个字符 \s :匹配空格 a|b :匹配a或b ^ :匹配字符串开头 $ :匹配...
    99+
    2023-01-30
    之旅 二十五 Python
  • Python学习之旅(二十四)
    一、threadlocal 在多线程环境下,每个线程都有自己的数据 一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁 在函数间一层层调用的时候,使用局部变量很麻烦,使...
    99+
    2023-01-30
    之旅 二十四 Python
  • Python学习之旅(二十九)
    一、Pillow PIL(Python Imaging Library):提供了强大的图像操作功能,可以通过简单的代码完成复杂的图像处理,是Python平台事实上的图像处理库,支持Python 2.7以及更低的版本 Pillow:在PI...
    99+
    2023-01-30
    之旅 二十九 Python
  • Python学习之旅(三十三)
    网络通信是两台计算机上的两个进程之间的通信,而网络编程就是如何在程序中实现两台计算机的通信 P协议负责把数据从一台计算机通过网络发送到另一台计算机 TCP协议则是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据...
    99+
    2023-01-30
    之旅 Python 三十三
  • Python学习之旅(三十二)
    Python内置了turtle库,可以在计算机上绘图 运动控制: 1、画笔定位到坐标(x,y):turtle.goto(x,y) 2、向正方向运动 distance 长的距离:turtle.forward(distance) 3、向负方...
    99+
    2023-01-30
    之旅 Python 三十二
  • Python学习之旅(三十四)
    UDP编程 相对TCP,UDP则是面向无连接的协议 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包 虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用...
    99+
    2023-01-30
    之旅 Python 三十四
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作