多态与多态性

鸭子类型

多态与多态性

多态:一类事物有多种形态.比如,动物有多种形态,人,狗,猪,豹子.水也有多种形态,冰,雪,水蒸气.

 #多态:同一类事物的多种形态
import abc
class Animal(metaclass=abc.ABCMeta): #同一类事物:动物
@abc.abstractmethod
def talk(self):
pass class People(Animal): #动物的形态之一:人
def talk(self):
print('say hello') class Dog(Animal): #动物的形态之二:狗
def talk(self):
print('say wangwang') class Pig(Animal): #动物的形态之三:猪
def talk(self):
print('say aoao') class Cat(Animal):
def talk(self):
print('say miamiao') #多态性:指的是可以在不考虑对象的类型的情况下而直接使用对象
peo1=People()
dog1=Dog()
pig1=Pig()
cat1=Cat() # peo1.talk()
# dog1.talk()
# pig1.talk() def func(animal):
animal.talk()
func(peo1) # 不用考虑peo1到底是猪狗人,还是其他的类型,直接可以通过这个统一的func函数来调用执行.

多态性的好处:

1.增加了程序的灵活性

  以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)

2.增加了程序额可扩展性

 通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用  

鸭子类型:

即,如果看起来像鸭子,走路像鸭子而且叫起来像鸭子,那么就是鸭子.

 #二者都像鸭子,二者看起来都像文件,因而就可以当文件一样去用
class TxtFile:
def read(self):
print("text is reading") def write(self):
pass class DiskFile:
def read(self):
print("disk is reading")
def write(self):
pass text = TxtFile()
disk = DiskFile() text.read()
disk.read()

鸭子类型,不用继承抽象类,只需要把2个类型里的方法属性写的相像.就可以了.

最新文章

  1. 使用Webdriver执行JS小结
  2. Z-BlogPHP 安装出现 (8) Undefined offset: 6 解决方法
  3. 【POJ】【1061】/【BZOJ】【1477】青蛙的约会
  4. ifndef/define/endif作用和用法
  5. bzoj1293: [SCOI2009]生日礼物
  6. 【暑假】[深入动态规划]UVa 10618 The Bookcase
  7. tRNAscan-SE
  8. vJine.Core 0.3.0.49 正式发布
  9. 巧妙使用checkbox制作纯css动态导航栏
  10. [RxJS] Filtering operators: take, first, skip
  11. react-native 环境配置及hello world
  12. XML字符串转化json
  13. 盼盼Degenerate——清除浮动的方法
  14. Struts2--标签tag
  15. ASP.NET Core 使用 Google 验证码(reCAPTCHA v3)代替传统验证码
  16. [转] Vue + Webpack 组件式开发(练习环境)
  17. 现代 PHP 新特性 —— Zend Opcache (转)
  18. Python_生成器generator
  19. XSS测试代码
  20. mac版本idea使用(二)-如何安装PlantUML画时序图、类图

热门文章

  1. 下载时出现using cached如何解决
  2. 缓存数据库Memcache
  3. [JXOI2018]排序问题
  4. Difference between BeanFactory and FactoryBean in Spring Framework (Spring BeanFactory与Factory区别)
  5. ORA-27154: post/wait create failed ORA-27300 ORA-27301 ORA-27302
  6. robotframework使用中的一些注意事项
  7. Collection 和 Collections 、 Array 与 Arrays 的区别
  8. 20175329 2018-2019-3《Java程序设计》第五周学习总结
  9. Luogu P3378 【模板】堆
  10. BZOJ3601 一个人的数论 莫比乌斯反演、高斯消元/拉格朗日插值