1. # -->
  2.  
  3. '''
  4.  
  5. 多态 与 鸭子类型
  6.  
  7. --> 什么是多态
  8. 对象的多种状态,父类对象的多种 (子类对象) 状态
  9.  
  10. --> 什么是鸭子类型:
  11. 长的像就是
  12. 1.规定有什么属性及什么方法的对象叫鸭子类型
  13. 2.能提供出规定的属性与方法的对象就是鸭子
  14.  
  15. 函数内有.xxx .yyy方法
  16. 传入的对象也必须要有.xxx .yyy才能运行
  17.  
  18. '''
  19.  
  20. # -- ( 多态 ) -------------------------------------------------------------------------------------------
  21.  
  22. import abc
  23. class People(metaclass=abc.ABCMeta):
  24. def __init__(self,name):
  25. self.name = name
  26.  
  27. def eat(self):
  28. print('eat')
  29. @abc.abstractmethod
  30. def speak(self):pass
  31.  
  32. class Chinese(People):
  33. def speak(self):
  34. print('说中国话')
  35.  
  36. class England(People):
  37. def speak(self):
  38. print('说英国话')
  39.  
  40. if __name__ == '__main__':
  41.  
  42. # def ask_someone(obj):
  43. # 多态的体现:功能或是需求,需要父类的对象,可以传入父类对象或任意子类对象
  44. # 一般都是规定需要父类对象,传入子类对象
  45. # 有抽象方法的父类不能被实例化 (假设因为被实例化后,就可以调用自己的抽象方法,没有意义)
  46. def ask_someone(obj):
  47. print('让%s上台演讲'%obj.name) # 父类提供,子类之间继承
  48. obj.speak()
  49. # 父类提供,英国和中国speak内容不同,
  50. # 调用abc模块装饰父类@abc.abstractmethod子类重写
  51.  
  52. ch = Chinese('王大锤')
  53.  
  54. # ch实例化,用了Chinses类,用继承的父类People中的自定义name,传入'王大锤'
  55. en = England('Tom')
  56.  
  57. ask_someone(ch)
  58. # 调用函数ask_someone(obj) 传入ch的实例化 Chinese('王大锤')
  59. ask_someone(en)
  60.  
  61. # England 类有.name .speak
  62. # ask_someone 方法有.name .speak需求
  63. # 即可直接传入
  64.  
  65. # -- ( 鸭子类型 ) -------------------------------------------------------------------------------------------
  66.  
  67. # 长的差不多的类,都具有一样的功能

多态 与 鸭子类型 duck duck duck的更多相关文章

  1. PythonI/O进阶学习笔记_3.1面向对象编程_python的多态和鸭子类型

    前言: 与第一篇的面向对象内容不同的是,第一篇中的面向对象更多的是与类.对象结合起来的概念粗浅理解,就是在编程历史中诞生的一种思想方法. 这篇的面向对象编程,更多落实到在语言设计实现中,是如何体现面向 ...

  2. 第7.3节 Python特色的面向对象设计:协议、多态及鸭子类型

    Python是一种多态语言,其表现特征是:对象方法的调用方只管方法是否可调用,不管对象是什么类型,从而屏蔽不同类型对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化. 一.    P ...

  3. Python面向对象04 /封装、多态、鸭子类型、类的约束、super

    Python面向对象04 /封装.多态.鸭子类型.类的约束.super 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 3. 鸭子类型 4. 类的 ...

  4. python 面向对象专题(四):封装、多态、鸭子类型、类的约束、super

    https://www.cnblogs.com/liubing8/p/11321099.html 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 ...

  5. day25 面向对象之多态和鸭子类型

    1.封装方法 如何封装:给方法名称前面加上双下划线 # ATM 的取款功能 # 1.插入银行卡 2.输入密码 3.选择取款金额 4.取款 class ATM: def __insert_card(se ...

  6. Python多态、鸭子类型

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

  7. 封装之property,多态,鸭子类型,classmethod与staticmethod

    一.封装之Property prooerty是一种特殊的属性,访问时他会执行一段功能(函数)然后返回 '''BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法,如果我们将其做成一个属 ...

  8. python多态和鸭子类型

    多态与多态性 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承). 比如:文件分为文本文件,可执行文件(在定义角度) 比如 我们按下 F1 键这个动作: 如果当前在 Fl ...

  9. Python类总结-多态及鸭子类型

    Python天生支持多态. 什么是多态: 一类事务的多种形态. 多态的一个例子 class Alipay(): def pay(self,money): print('用支付宝支付了%s元' % mo ...

随机推荐

  1. 序列化---Serializable与Externalizable源码

    Serializable接口总结: 1. java.io.Serializable接口是一个标识接口,它没有任何字段和方法,用来表示此类可序列化: 2. 父类声明该接口,则其与其所有子类均可序列化,都 ...

  2. php 类名和方法名相同(构造函数)

    //php 5.6class father{ public function __construct() { echo __METHOD__; }} class son extends father{ ...

  3. XFS文件系统的备份和恢复

    1.工具 XFS文件系统提供了xfsdump和xfsrestore来协助备份.恢复XFS文件系统中的数据,xfsdump按inode顺序来备份XFS文件系统,备份时不需要卸载文件系统,备份和恢复的过程 ...

  4. springcloud-zuul路由网关

    路由网关(zuul) 在微服务架构中,需要多个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能 路由.配置管理等,由这个基础组件相互协作,共同组建了一个简单的微服务系统.一个简 ...

  5. C++标准模板库(STL)之Pair

    1.Pair的常用用法 pair:两个元素绑在一起作为一个合成元素.可以看成是两个元素的结构体. struct pair { typeName1 first; typeName2 second; }; ...

  6. Java获取本地IP地址和主机名

    方式一:通过java.net.InetAddress类获取 public void test1() { try { InetAddress addr = InetAddress.getLocalHos ...

  7. git 工作区管理

    git工作区 git的工作区就是电脑中能看到的目录,比如我的learning文件夹就是一个工作区 版本库暂存区 工作去有一个隐藏的目录.git,这个不算工作区,而是git的版本库 git的版本库中存了 ...

  8. log日志文件

    单文件写 根据日志的等级是否写入,下面的一个例子就是等级为10,大于等于等级10的记录,小于的话就不记录,在创建之前先进行基本的日志格式配置 import logging logging.basicC ...

  9. js的关于for的语句

    JavaScript for...in 语句 for...in 语句用于对数组或者对象的属性进行循环操作. for ... in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作. ...

  10. JS-5-循环

    循环结构 循环:反复执行有关操作 * for循环 for(var i=1; i<=50; i++) { console.log("第"+i+"次说我爱你" ...