zoukankan      html  css  js  c++  java
  • 面向对象之多态

    一、何为多态?

    多态就是指一个事物有多种形态

    文件有多种形态:文本文件,可执行文件等

    import abc
    class File(metaclass=abc.ABCMeta): #同一类事物:文件
    @abc.abstractmethod
    def click(self):
    pass

    class Text(File): #文件的形态之一:文本文件
    def click(self):
    print('open file')

    class ExeFile(File): #文件的形态之二:可执行文件
    def click(self):
    print('execute file')

    二、什么是多态性绑定(在继承的背景下使用,有时也成为多态性)

    多态性指的是在不考虑实例类型的情况下使用实例

    比如:老师.下课铃响了(),学生.下课铃响了(),老师执行的是下班操作,学生执行的是放学操作。二者消息一样,但是执行结果完全不一样。这个就称为多态性。

    三、多态性的好处

    1.增加了程序的灵活性:不论对象千变万化,使用者都是同一个形式去调用

    2.增加了程序的可扩展性:通过继承类创建了一个新的类,使用者不需要更改自己的代码,还是用之前的func函数去调用

    class Cat(Animal): #属于动物的另外一种形态:猫

      def talk(self):
      print('say miao')

    def func(animal): #对于使用者来说,自己的代码根本无需改动
      animal.talk()

    cat1=Cat() #实例出一只猫
    func(cat1) #甚至连调用方式也无需改变,就能调用猫的talk功能
    say miao

    这样我们新增了一个形态Cat,由Cat类产生的实例cat1,使用者可以在完全不需要修改自己代码的情况下。使用和人、狗、猪一样的方式调用cat1的talk方法,即func(cat1)

    四、鸭子类型

    python崇尚鸭子类型,如果看起来像鸭子,叫声像鸭子,而且走路也像鸭子,那么他就是鸭子

    程序员通常根据这种行为来编写程序。比如:如果想编写现有对象的自定义版本,就可以继承该对象

    也可以创建一个外观和行为相像,但是与行为没有任何关系的全新对象,后者通常用于保存程序组件的松耦合度

    #二者都像鸭子,二者看起来都像文件,因而就可以当文件一样去用
    class TxtFile:
    def read(self):
    pass

    def write(self):
    pass

    class DiskFile:
    def read(self):
    pass
    def write(self):
    pass

  • 相关阅读:
    两分钟彻底让你明白Android Activity生命周期(图文)!
    C++命名空间 namespace的作用和使用解析
    编译型语言、解释型语言、静态类型语言、动态类型语言概念与区别
    git 使用详解(8)-- tag打标签
    C#托管代码与C++非托管代码互相调用
    Qt属性表控件的使用 QtTreePropertyBrowser
    在VS2010上使用C#调用非托管C++生成的DLL文件(图文讲解)
    (二十二)访问者模式详解(伪动态双分派)
    (二十一)状态模式详解(DOTA版)
    (二十)职责链模式详解(都市异能版)
  • 原文地址:https://www.cnblogs.com/zhangzhechun/p/10460090.html
Copyright © 2011-2022 走看看