多态

目标

  • 多态

面向对象三大特性

  1. 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的  中

    • 定义类的准则
  2. 继承 实现代码的重用,相同的代码不需要重复的编写
    • 设计类的技巧
    • 子类针对自己特有的需求,编写特定的代码
  3. 多态 不同的 子类对象 调用相同的 父类方法,产生不同的执行结果

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

多态案例演练

需求

  1. 在 Dog 类中封装方法 game

    • 普通狗只是简单的玩耍
  2. 定义 XiaoTianDog 继承自 Dog,并且重写 game 方法
    • 哮天犬需要在天上玩耍
  3. 定义 Person 类,并且封装一个 和狗玩 的方法
    • 在方法内部,直接让 狗对象 调用 game 方法

案例小结

  • Person 类中只需要让 狗对象 调用 game 方法,而不关心具体是 什么狗

    • game 方法是在 Dog 父类中定义的
  • 在程序执行时,传入不同的 狗对象 实参,就会产生不同的执行效果

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

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. 创建一个狗对象
# wangcai = Dog("旺财")
wangcai = XiaoTianDog("飞天旺财") # 2. 创建一个小明对象
xiaoming = Person("小明") # 3. 让小明调用和狗玩的方法
xiaoming.game_with_dog(wangcai)

python-面向对象-08_多态的更多相关文章

  1. python 面向对象之多态与绑定方法

    多态与多态性 一,多态 1,多态指的是一类事物有多种形态(python里面原生多态) 1.1动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.AB ...

  2. Python面向对象之多态

    多态 面向对象三大特性 封装 根据职责将属性和方法封装到一个抽象的类中:--定义类的准则 继承 实现代码的重用,相同的代码不需要重复的编写:--设计类的技巧:子类针对自己的需求,编写特定的代码: 多态 ...

  3. Python 面向对象5 多态

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

  4. Python 面向对象 组合-多态与多态性-封装-property

    面向对象-组合 1.什么是组合 组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 class Foo: xxx = 111 class Bar: yyy = 222 obj = Foo( ...

  5. Python之路【第十篇】:Python面向对象之多态、多态性

    阅读目录 一 多态 多态指的是一类事物有多种形态 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @ab ...

  6. python面向对象的多态-类相关内置函数-类内置魔法函数-迭代器协议-上下文管理-04

    多态 一种事物具备不同的形态 例如:水 --> 固态.液态.气态 多态:# 多个不同对象可以相应同一个对象,产生不同的结果 首先强调,多态不是一种特殊的语法,而是一种状态,特性(多个不同对象可以 ...

  7. python 面向对象之多态

    多态是什么? 用一句话来概括下,多态就是同一操作(方法)作用于不同的对象时,可以有不同的解释,产生不同的执行结果. #!/usr/bin/env python # -*- coding: utf-8 ...

  8. Python面向对象之多态、封装

    一.多态 超过一个子类继承父类,出现了多种的形态. 例如,动物种类出现了多种形态,比如猫.狗.猪 class Animal:pass class Cat(Animal):pass class Dog( ...

  9. python 面向对象:多态和多态性

    很多人喜欢将多态与多态性二者混为一谈,然后百思不得其解,其实只要分开看,就会很明朗. 一.多态 多态指的是一类事物有多种形态.(一个抽象类有多个子类,因而多态的概念依赖于继承) 比如动物有多种形态:人 ...

  10. Python入门之面向对象的多态和继承

    本章内容 Python面向对象的多态和继承对比 ========================================= 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的 ...

随机推荐

  1. 判断资源贴图是否有alpha

    /* modfly selected textures`s maxSize and ImportFormat bool hasAlpha = true; if(hasAlpha)then(textur ...

  2. java虚拟机性能监控调优及原则

    摘抄 http://uule.iteye.com/blog/2114697 一.JVM内存模型及垃圾收集算法  1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老 ...

  3. (iOS)使用auto layout进行复杂布局时,UILabel的相关trick

    本文转载至 http://blog.csdn.net/madongchunqiu/article/details/47960745  本文首发于CSDN:http://blog.csdn.net/ma ...

  4. iOS - Action Extension

    上一篇<iOS开发 之 Share Extension>介绍了分享扩展的开发与使用,本篇主要还是讲述在系统分享菜单中最底下一栏的功能扩展:Action Extension,该扩展跟Shar ...

  5. 发现linux主机再用代理上网的情况下不能用wget从外网下载资源

    公司禁网(也不是完全禁,能连接外网数据库,不能下载东西,不能打开网页,但是却能打开谷歌的收索页面,只是不能点进网页) 发现linux主机再用代理上网的情况下不能用wget从外网下载资源,但是却可以从内 ...

  6. 【Phalapi】新加Namespace (模块)

    官网地址: https://www.phalapi.net/ github 地址: https://github.com/phalapi/phalapi/tree/master-2x 1 compos ...

  7. ( ( (int(*)(uint, ushort, uint *, uint, int)) (*((uint *)(TCM_BASE + 0x8))) ) (a,b,c,d,e) )

    (  (  (int(*)(uint, ushort, uint *, uint, int))  (*((uint *)(TCM_BASE + 0x8)))  ) (a,b,c,d,e)  ) 首先红 ...

  8. Why is IMAP better than POP?

    https://www.fastmail.com/help/technical/imapvspop.html POP is a very simple protocol that only allow ...

  9. 简易扩展Visual Studio UnitTesting支持TestMethodCase

    NUnit的TestCaseAttribute可以简化大量的测试参数输入用例的编写,如果基于Visual Studio Unit Test Project开发则默认没有类似的功能,看一段对比代码: p ...

  10. 移除DuiLib项目Linker中的riched20.lib

    如果已安装Windows SDK.Windows Mobile SDK且默认包含这些目录编译源代码没有问题.由于一些改动需要版本管理发现Build Agent运行失败,考虑到迁移各方面原因还是决定修改 ...