python中的多态

多态性

是允许将父对象设置成为和一个或多个它的子对象相等的技术,比如Parent:=Child; 多态性使得能够利用同一类(基类)类型的指针来引用不同类的对象,以及根据所引用对象的不同,以不同的方式执行相同的操作.

c++中多态更容易理解的概念为

允许父类指针或名称来引用子类对象,或对象方法,而实际调用的方法为对象的类类型方法。

--------------以上内容来自百度百科----------------

python不支持多态

python是一种动态语言,参数在传入之前是无法确定参数类型的,看下面例子: [python] view plaincopy

  1. class A:  
  2. def prt(self):  
  3. print "A"
  4. class B(A):  
  5. def prt(self):  
  6. print "B"
  7. class C(A):  
  8. def prt(self):  
  9. print "C"
  10. class D(A):  
  11. pass
  12. class E:  
  13. def prt(self):  
  14. print "E"
  15. class F:  
  16. pass
  17. def test(arg):  
  18.     arg.prt()  
  19. a = A()  
  20. b = B()  
  21. c = C()  
  22. d = D()  
  23. e = E()  
  24. f = F()  
  25. test(a)  
  26. test(b)  
  27. test(c)  
  28. test(d)  
  29. test(e)  
  30. test(f)  

输出结果: A B C A E Traceback (most recent call last):   File "/Users/shikefu678/Documents/Aptana Studio 3 Workspace/demo/demo.py", line 33, in <module>     test(a),test(b),test(c),test(d),test(e),test(f)   File "/Users/shikefu678/Documents/Aptana Studio 3 Workspace/demo/demo.py", line 24, in test     arg.prt() AttributeError: F instance has no attribute 'prt' 乍一看似乎python支持多态,调用test(a),test(b),test(c),test(d)时工作的很好,但是下边就大不一样了。调用test(e)时,python只是调用e的prt方法,并没有判断e是否为A子类的对象(事实上,定义test方法时也没有指定参数的类型,python根本无法判断)。调用test(f)时报错,原因很很简单,f没有prt方法。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专注研发

交换排序—冒泡排序(Bubble Sort)

在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们...

13120
来自专栏阿杜的世界

【转】Java知识点集锦(1~40)

答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primi...

11320
来自专栏C/C++基础

printf()详解之终极无惑

printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。

44530
来自专栏cmazxiaoma的架构师之路

你应该会的一道多线程笔试题

32330
来自专栏猿人谷

求子数组的最大和

分析:输入一个整形数组,数组里有正数也有负数,数组中一个或连续的多个正数,求所有子数组的和的最大值。 当我们加上一个正数时,和会增加;当我们加上一个负数时,和会...

203100
来自专栏玄魂工作室

如何学python 第八课 流程控制-For,While,循环语句,函数

循环语句 也许你会问,什么是‘循环’?在脚本程序里,循环就是‘在一定情况下一次又一次的执行某些代码’。举个例子来说,假设你很饿,桌上有好多好多个馒头,当你依旧饿...

35390
来自专栏JMCui

读书笔记 之《Thinking in Java》(对象、集合、异常)

一、前言:     本来想看完书再整理下自己的笔记的,可是书才看了一半发现笔记有点多,有点乱,就先整理一份吧,顺便复习下前面的知识,之后的再补上。     真的...

38080
来自专栏移动端开发

内存管理说明白点

16120
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列6

清明即事 帝里重清明, 人心自愁思。 车声上路合, 柳色东城翠。 花落草齐生, 莺飞蝶双戏。 空堂坐相忆, 酌茗聊代醉。 1.String是最基本的数据类型吗...

27950
来自专栏菜鸟计划

angularjs filter详解

过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果。 主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的...

38780

扫码关注云+社区

领取腾讯云代金券