谢邀!

话说,你为什么说Python中没有数据类型的概念。Python肯定是有数据类型的,在我所见的所有语言中,没有一门编程语言是没有数据类型的。

依据你的问题,我理解或许你的意思是,Python没有类似Java和C++那样的抽象类、接口的概念,而且参数定义与传递时,可以任意改变数据类型。其实,python是有这些的,只是不被推荐。

来说说python中推荐的方式吧。

先举个例子,以知乎官方萌物 "刘看山" 举例。它可以帮助自动邀请别人回答问题。第一次见到时,发现它长这样:

从上面的图中可以知道,刘看山除了能帮助邀请别人答题,还能看书。但是它是啥呢?看着有鼻子有眼,看起来像条狗,那么试着定义如下的类:

class Dog:

def __init__(self, name):

self.name = name

def invite(self):

print("自动邀请牛人帮你答题")

def read_book(self):

print("我要看会儿书")

写完代码之后,不太放心,百度一下。原来并不是狗,而是一种称为北极狐的动物。赶紧修改一下代码吧。

class ArcticFox:

def __init__(self, name):

self.name = name

def invite(self):

print("自动邀请牛人帮你答题")

def read_book(self):

print("我要看会儿书")

接着可以来定义一个函数,我们让刘看山把所有它能干的活都干了。

def liukanshan_dowork(liukanshan):

liukanshan.invite()

liukanshan.read_book()

因为python没有任何类型限制,所以liukanshan函数可以传入任何类型参数进来。

liukanshan = ArcticFox("刘看山")

liukanshan_dowork(liukanshan)

上面的代码中定义变量liukanshan,并赋值为ArticFox类型,接着可以干活了。

假设某天,知乎发现刘看山这只北极银狐每天干这么多活太累了,决定为它找个帮手,和它干同样的活,起名为刘看水,并且不再是北极狐,而是一条狗。

liukanshui = Dog("刘看水")

liukanshan_dowork(liukanshui)

这段代码也是可以执行的。效果是不是和其他语言的多态效果是一样?区别在于没有把 刘看山 和 刘看水 限定为同一类型,而是依据它们的能力决定是否能被同段代码使用。

这就是鸭子模型,此处也可称为 看山 模型(胡扯的,捂脸...)。相对而言,这种编程思维更具灵活性。在鸭子模型中,一个对象是否可用不再由继承特定类或实现特定接口实现,而是由它有的"方法和属性的集合"决定。

鸭子模型的简单灵活,甚至会让我们没有意识到python中有多态。 这是动态语言的优点,但也是动态语言的缺点。优点是,通过这个特性,我们省去了繁杂的继承关系,同时实现很多静态语言无法实现的高级用法,加快了开发的效率。缺点是,过于灵活的语言就必然会增加出错的概率,不便于后期的维护。而且,灵活的语法通常会以降低语言性能为代价。

说到这里,突然想到了最近在学的GO语言,它实现一套类似鸭子模型的基于接口的编程方式,多了动态语言的灵活性,同时也有类型约束,真的是so cool。

python中面向对象的缺点_面向对象中的多态在 Python 中是否没有什么意义?相关推荐

  1. python完全支持面向对象编程思想_面向对象的编程思想和Python的继承和多态,特殊方法,引用计数...

    面向对象的编程思想和Python的类,访问和属性,继承 在上一文中我们了解到了,私有的属性的访问方式:实例名._类名__私有属性名. 一.私有的属性如何对外提供公有的取值和赋值方法呢?提供公有的方法作 ...

  2. python是一种面向对象的高级语言_为什么入门大数据选择Python而不是Java?

    马云说:"未来最大的资源就是数据,不参与大数据十年后一定会后悔."毕竟出自wuli马大大之口,今年二月份我开始了学习大数据的道路,直到现在对大数据的学习脉络和方法也渐渐清晰.今天我 ...

  3. python三大特征六大原则_面向对象程序设计(Object Oriented Programming)的三大特性,六大原则...

    三大特性 封装.继承.多态性 拿简单工厂模式举例: namespace DesignMode_01 { // 计算基类 public class Operation { private double ...

  4. python 去除panda安装包_沉淀,再出发:python中的pandas包

    沉淀,再出发:python中的pandas包 一.前言 python中有很多的包,正是因为这些包工具才使得python能够如此强大,无论是在数据处理还是在web开发,python都发挥着重要的作用,下 ...

  5. python中如何移动图形工作站_六招教你用Python分分钟构建好玩的深度学习应用

    原标题:六招教你用Python分分钟构建好玩的深度学习应用 导读]深度学习是近来数据科学中研究和讨论最多的话题.得益于深度学习的发展,数据科学在近期得到了重大突破,深度学习也因此得到了很多关注.据预测 ...

  6. python 判断大于等于且小于等于_关于if语句:检查python中值是否大于、小于或等于零的更好方法...

    我有一个函数,它检查一个值是否大于.小于或等于零,并根据结果返回三种颜色中的一种.另外,如果某个属性存在,它不会返回三种颜色中的一种,而是返回单独的第四种颜色.我是这样解决的: def set_col ...

  7. python服务发现与注册_(转)微服务架构中服务注册与发现

    https://blog.csdn.net/u011537073/article/details/69663858 想象一下,如果你在写代码调用一个有REST API或Thrift API的服务,你的 ...

  8. python删除链表中重复的节点_剑指offer:删除链表中重复的节点

    题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...

  9. java面向对象模拟电梯_面向对象的程序设计-电梯调度系统的设计、优化与测试...

    面向对象的程序设计(2019)第二单元总结 I  对问题的初体验 在开始OO之旅前,对OO电梯早有耳闻.这一次终于轮到我自己实现OO电梯了.首先从顶层需求出发对电梯系统进行分析,对象包括电梯.任务和乘 ...

最新文章

  1. 深度学习(5)感知机(神经元)与神经网络
  2. 【神经网络】(7) 迁移学习(CNN-MobileNetV2),案例:乳腺癌二分类
  3. 论文不公开代码,应该被直接拒稿?
  4. perl 中单引号双引号的区别-----perl学习笔记
  5. 详解何恺明团队4篇大作 !(附代码)| 从特征金字塔网络、Mask R-CNN到学习分割一切
  6. SQL Server 数据库连接字符串的声明
  7. drupal与html转换,老葛 怎么改变drupal form 生成的html啊 ? | Think in Drupal
  8. java 实例变量初始化_java学习之实例变量初始化
  9. Go语言(Golang)约瑟夫游戏(Joseph)
  10. 基于持久化的wordcount程序 foreachRDD
  11. vlookup match_INDEX-MATCH — VLOOKUP功能的升级
  12. 如何用python做一个会聊天的女朋友_520来啦~教你用Python给自己造了一个女朋友!...
  13. 《Pytorch - 逻辑回归模型》
  14. Ubuntu下配置使用maven
  15. 三星手机微信聊天记录删除了怎么恢复
  16. 人工智能--符号计算--笔记
  17. 20155313 杨瀚 《网络对抗技术》实验四 恶意代码分析
  18. python 一维数据和二维数据的存储,表达和处理
  19. echarts瀑布图_一种基于阶梯瀑布图的数据计算方法与流程
  20. Java极光短信发送

热门文章

  1. C语言内存对齐详解(1)
  2. iphone NSTimer
  3. 网络***检查分析---破解安全隐患问题回答
  4. 华为机试HJ44:Sudoku(数独问题,深度优先遍历DFS解法)
  5. 如何将c语言编译器设置为初始状态,C语言编译器设与实现毕业论文设计.doc
  6. 敏捷开发与测试(面试话题之一)
  7. sqlite3 可视化工具 linux,【SQLite3下载】SQLite3可视化工具 v3 3.27.2 官方版-开心电玩...
  8. sql注入python_Python--sql注入
  9. Mac安装Redis
  10. php 替换所有中文为空,php 匹配替换中文