前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python中的多态

python中的多态

作者头像
bear_fish
发布2018-09-20 14:54:35
6250
发布2018-09-20 14:54:35
举报

多态性

是允许将父对象设置成为和一个或多个它的子对象相等的技术,比如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方法。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年04月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 多态性
  • c++中多态更容易理解的概念为
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档