zoukankan      html  css  js  c++  java
  • Python 知识要点:多态

    多态(英语:Polymorphism),是指物件导向程式执行时,相同的讯息可能会送給多个不同的类別之物件,而 系统可依剧物件所属类別,引发对应类別的方法,而有不同的行为。简单来说,所谓多型意指相同的讯息給予不 同的物件会引发不同的动作称之。(维基百科)

    多态,不同的子类对象调用相同的父类方法,产生不同的执行结果。

    例如:1 + 2 >> 3;  "Wor" + "ld" >> "World";  + 可以根据不同的参数类型执行不同的操作,得到不同的结果。

    关于多态,有一个被称作“鸭子类型”(duck typing)的东西,其含义在维基百科中被表述为:

    在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语 义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。这个概念的名字来源于由 James Whitcomb Riley 提出的鸭子测试:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”

    我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。

    class Dog(object):
        def __init__(self, name):
            self.name = name
    
        def game(self):
            print("%s 去接飞盘" % self.name)
    
    
    class XiaoTianDog(Dog):
        def game(self):
            print("%s 飞天" % self.name)
    
    
    class Person(object):
        def __init__(self, name):
            self.name = name
    
        def game_with_dog(self, dog):
            print("%s 和 %s 快乐的玩耍" % (self.name, dog.name))
    
            # 让狗玩耍
            dog.game()
    
    
    # 1.创建一个狗对象
    # 不同的子类对象调用相同的父类方法game
    da_wang = Dog("大旺")
    wang_cai = XiaoTianDog("飞天旺财")
    
    # 2.创建一个小明对象
    xiao_ming = Person("小明")
    
    # 3.让小明调用和狗玩的方法
    xiao_ming.game_with_dog(da_wang)
    xiao_ming.game_with_dog(wang_cai)
    class Animal:
        def __init__(self, name=""):
            self.name = name
    
        def talk(self):
            print("$%^$^$")
    
    
    class Cat(Animal):
        def talk(self):
            print("MiMiMi")
    
    
    class Dog(Animal):
        def talk(self):
            print("WoWoWo")
    
    
    animal = Animal()
    animal.talk()
    
    jack = Cat("Jack")
    jack.talk()
    
    tom = Dog("Tom")
    tom.talk()
    从现在开始,种下梦想中的参天大树
  • 相关阅读:
    如何快速定位到DBGrid的某一行!!!急...
    说说设计模式~单件模式(Singleton)
    EF架构~终于自己架构了一个相对完整的EF方案
    .Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点
    在LINQ中实现多条件联合主键LEFT JOIN
    从LINQ开始之LINQ to Objects(上)
    WPF控件模板和数据模板
    WPF的ListView控件自定义布局用法实例
    初步探讨WPF的ListView控件(涉及模板、查找子控件)
    LINQ技巧:如何通过多次调用GroupBy实现分组嵌套
  • 原文地址:https://www.cnblogs.com/dc2019/p/13189320.html
Copyright © 2011-2022 走看看