广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 面向对象之多态
  • 950
分享到

python 面向对象之多态

面向对象多态python 2023-01-30 21:01:22 950人浏览 安东尼

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

摘要

多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。那么,多态的

多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。


简单来说:一种接口,多种实现。

多态的主要作用是实现接口的重用


举例:

class Animal(object): #动物
    def __init__(self, name):  # 构造函数
        self.name = name

    def talk(self):  #说话
        pass


class Cat(Animal): #猫
    def talk(self): #说话
        print('%s: 喵喵喵!' % self.name)


class Dog(Animal): #狗
    def talk(self):
        print('%s: 汪!汪!汪!' % self.name)

正常情况下,实例化对象

d = Dog("花花")
d.talk()

c = Cat("雪儿")
c.talk()

执行输出:

花花: 汪!汪!汪!

雪儿: 喵喵喵!


上面的方法,必须先知道它是什么动物,才能让它叫


能不能同一个接口,比如animal.talk(),可以让所有的动物都叫

如何实现呢?

定义一个函数,完整代码如下:

#!/usr/bin/env pythoncoding: utf-8
__author__ = 'www.py3study.com'

class Animal(object): #动物
    def __init__(self, name):  # 构造函数
        self.name = name

    def talk(self):  #说话
        pass

class Cat(Animal): #猫
    def talk(self): #说话
        print('%s: 喵喵喵!' % self.name)

class Dog(Animal): #狗
    def talk(self):
        print('%s: 汪!汪!汪!' % self.name)

def animal_talk(obj): #一个接口,多种形态
    obj.talk()

d = Dog("花花") #实例化对象
c = Cat("雪儿")

animal_talk(d) #执行函数,传一个对象
animal_talk(c)

执行输出:

花花: 汪!汪!汪!

雪儿: 喵喵喵!


这样执行,看不出啥效果,但问题在于,现在相当于有一个统一接口了

可以传入任意对象,根据对象的不通,实现不同的状态。

这种就是一种接口,多种实现

具体怎么实现,是在子类里面定义的。

这还不是真正意义的多态。


将这个接口,移植到父类里面

#!/usr/bin/env Python
# coding: utf-8
__author__ = 'www.py3study.com'

class Animal(object): #动物
    def __init__(self, name):  # 构造函数
        self.name = name

    def talk(self):  #说话
        pass

    @staticmethod #静态方法,需要通过类名来调用这个方法
    def animal_talk(obj):  # 统一接口
        obj.talk()

class Cat(Animal): #猫
    def talk(self): #说话
        print('%s: 喵喵喵!' % self.name)

class Dog(Animal): #狗
    def talk(self):
        print('%s: 汪!汪!汪!' % self.name)


d = Dog("花花") #实例化对象
c = Cat("雪儿")

Animal.animal_talk(d) #执行方法,传一个对象
Animal.animal_talk(c)

执行输出:

花花: 汪!汪!汪!

雪儿: 喵喵喵!


调用同一的接口,实现不同的状态,这就是多态(一种接口,多种实现)

这种场景,主要用在接口重用

就像统一的接口


--结束END--

本文标题: python 面向对象之多态

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

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

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • python 面向对象之多态
    多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。那么,多态的...
    99+
    2023-01-30
    面向对象 多态 python
  • java面向对象之多态
    多态的简单理解:student类继承了Person类,则student类的对象既是student又是person类多态性具有两种展现的形式:1.方法的多态性:(1)方法的重载:同一个方法可以根据传入的参数的类型或者个数的不同实现不同的功能(...
    99+
    2019-03-28
    java入门 java 面向对象 多态
  • Python 面向对象 组合-多态与多态
    面向对象-组合 1.什么是组合   组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 1 class Foo: 2 xxx = 111 3 4 class Bar: 5 yyy = 222 6...
    99+
    2023-01-30
    多态 组合 面向对象
  • Java全面分析面向对象之多态
    目录多态的理解向上转型向上转型的三种形式动态绑定和静态绑定方法的重写进一步认识和理解多态多态的优点多态的理解 什么是多态呢??从字面理解就是多种形态,也就是不同类实例化出来的对象调用...
    99+
    2022-11-13
  • python 面向对象之静态方法
    通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不...
    99+
    2023-01-30
    静态 面向对象 方法
  • Java 面向对象 之 多态实例2
    转载于 : http://www.verejava.com/id=16992846385655 public class Polymorphism3 {public static&...
    99+
    2023-06-02
  • Java面向对象之如何实现多态
    这篇文章主要介绍了Java面向对象之如何实现多态,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。转载于 : http://www.verejava.com/id=16...
    99+
    2023-06-02
  • 详解Java面向对象编程之多态
    目录Java面向对象编程之多态一.对于多态的理解:二.多态的实现方法总结Java面向对象编程之多态 一.对于多态的理解: 通俗点理解,多态其实就是一词多义,就是一种方法的多种状态,即...
    99+
    2022-11-12
  • Java面向对象之多态实例分析
    这篇文章主要介绍“Java面向对象之多态实例分析”,在日常操作中,相信很多人在Java面向对象之多态实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java面向对象之多态实例分析”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • Python面向对象之面向对象基本概念
    面向过程和面向对象概念 过程和函数:过程类似于函数,只能执行,但是没有返回结果;函数不仅能执行,还能返回结果。 面向过程和面向对象 基本概念 面向过程-怎么做 把完成某一个需求的所有步骤从头到尾逐步实现; 根据开发需求,将某些功能独立的...
    99+
    2023-01-31
    面向对象 基本概念 Python
  • Python面向对象之类和对象
    目录类定义类定义类和属性类中方法对象方法(普通方法)类方法静态方法魔术方法对象创建对象对象属性总结 类 定义类 所有类名首字母要求大写,多个单词时遵循驼峰命名法 所...
    99+
    2022-11-12
  • Java面向对象之多态的用法示例
    小编给大家分享一下Java面向对象之多态的用法示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!public class Polymorphi...
    99+
    2023-06-02
  • Java面向对象之多态的示例分析
    这篇文章主要介绍Java面向对象之多态的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!public class Polymorphism {public static&...
    99+
    2023-06-02
  • python之路day06 面向对象
    面向对象(你就是上帝): 世间万物,皆可分类 世界万物,皆为对象 https://www.cnblogs.com/alex3714/articles/5188179.html 面向对象编程 OOP编程是利用“类”和“对象”来创建各种模型来...
    99+
    2023-01-30
    之路 面向对象 python
  • python之初始面向对象
    1. 初识面向对象   面向过程:     一切以事务的发展流程为中心.   面向对象:     一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 2. 类. 对象 ...
    99+
    2023-01-30
    面向对象 python
  • python 面向对象之变量
    类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。实例变量:定义在方法中的变量,只作用于当前实例的类。类变量的用途?大家公共的属性,节省开销看下面一段代码class Role...
    99+
    2023-01-30
    变量 面向对象 python
  • python之成员(面向对象)
    1. 成员   在类中你能写的所有内容都是类的成员    class Person: def __init__(self, name, gender): self.name = name # 成员...
    99+
    2023-01-30
    面向对象 成员 python
  • python面向对象之反射
    一、静态方法(staticmethod)和类方法(classmethod)类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属×××互(也就是可以使用类属性)静态方法:让类里的方法直接被类调用,就像正常调用函数一样类方法和静态方...
    99+
    2023-01-31
    反射 面向对象 python
  • python 面向对象之继承
    文章目录 前言继承的概念单继承多继承子类重写父类的同名方法和属性子类调用父类同名的方法和属性多层继承私有权限 前言 前面我们已经学习了 python 面向对象的类和对象,那么今天我将为大...
    99+
    2023-09-01
    python 开发语言
  • Python面向对象之入门类和对象
    目录什么是面向对象编程?定义类,从具体代码来感受吧!多个类和对象的观察补充一下类的属性(数据部分)总结什么是面向对象编程? 我们是不是听过面向过程,拿来放在一起对比就比较好理解了。 ...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作