zoukankan      html  css  js  c++  java
  • python面向对象学习(五)多态

    多态

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

    • 多态 可以 增加代码的灵活度
    • 继承重写父类方法 为前提
    • 是调用方法的技巧,不会影响到类的内部设计

    多态案例练习

    需求

    1. Dog 类中封装方法 game
      • 普通狗只是简单的玩耍
    2. 定义 XiaoTianDog 继承自 Dog,并且重写 game 方法
      • 哮天犬需要在天上玩耍
    3. 定义 Person 类,并且封装一个 和狗玩 的方法
      • 在方法内部,直接让 狗对象 调用 game 方法
    class Dog:
    
        def __init__(self, name):
    
            self.name = name
    
        def game(self):
    
            print("%s 很开心的玩耍..." % self.name)
    
    
    class XiaoTianQuan(Dog):
    
        def game(self):
    
            print("%s 飞到天上玩..." % self.name)
    
    
    class Person:
    
        def __init__(self, name):
    
            self.name = name
    
        def game_with_dog(self, dog):
    
            print("%s 和 %s 玩的停不下来" % (self.name, dog.name))
    
            dog.game()
    
    
    xiaohuagou = Dog("小花狗")
    
    zfx = Person("张风闲")
    
    zfx.game_with_dog(xiaohuagou)
    
    xtq = XiaoTianQuan("哮天犬")
    zfx.game_with_dog(xtq)
    

    案例小结

    • Person 类中只需要让 狗对象 调用 game 方法,而不关心具体是 什么狗
      • game 方法是在 Dog 父类中定义的
    • 在程序执行时,传入不同的 狗对象 实参,就会产生不同的执行效果

    多态 更容易编写出出通用的代码,做出通用的编程,以适应需求的不断变化!

  • 相关阅读:
    mysql 权限问题
    触发器作用
    带有循环功能的存储过程
    带有条件判断的存储过程
    数据存储 三大范式-----------待续
    存储过程自 带条件判断的存储过程
    线程异步更新UI
    TextBox只能输入数字
    C#中无边框窗体移动或拖控件移动窗体
    classloader原理
  • 原文地址:https://www.cnblogs.com/zhangfengxian/p/python-polymorphic.html
Copyright © 2011-2022 走看看